【问题标题】:Python ctypes: One byte variablePython ctypes:一字节变量
【发布时间】:2012-11-14 11:18:59
【问题描述】:

使用 python struct pack('<B',1) 值正确打包 <01> 到一个字节,但使用 ctypes 我无法获得类似的结果。

是否可以使用 ctypes 获得相同的结果?

c_byte 似乎是 4 个字节 <01000000>

添加了示例代码。

class TEST(Structure):
    _fields_ = [("int", c_int),("byte", c_byte)]

test = TEST(2,1)
print test.int
print test.byte

#bytes
print hexlify(buffer(test)[:])

现在打印是

2
1
0200000001000000

字节应该是 0200000001。是因为缓冲区调用还是我应该以某种方式声明字节对齐?

【问题讨论】:

  • 你从哪里得到输出? ctypes.sizeof(ctypes.c_byte(1)) 为我返回 1。

标签: python ctypes


【解决方案1】:

这可能是因为对齐/填充,使用_pack_ 设置:

class TEST(Structure):
    _pack_ = 1
    _fields_ = [("int", c_int),("byte", c_byte)]

test = TEST(2,1)    
print hexlify(test)

将打印0200000001

【讨论】:

  • 您可以只检查sizeof(TEST) 而不是创建实例并获取缓冲区。
  • @eryksun 是的,想展示内容的不同。顺便说一句,事实证明只有hexlify(test) 有效,更新了答案。
  • 是的,hexlify 无需显式获取缓冲区即可工作。在 2.5 hexlify 中使用“s#”formatPyArg_ParseTuple(args, "s#:b2a_hex", &argbuf, &arglen)。在以后的版本中,它使用“s*”来获取Py_bufferPyArg_ParseTuple(args, "s*:b2a_hex", &parg)
猜你喜欢
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 2013-02-16
  • 2013-01-24
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多