python结构到原始字符串表示

时间:2012-07-22 16:44:21

标签: python bytestring hex

我想知道一些事情,此时我使用python ctypes制作一些wifi帧结构,并且使用lorcon2我可以将它们发送到Lan。我想在一个字节字符串中转换这个结构,以得到这个结构的无符号十六进制重现。为此,我已经看到了实现这一目标的两个功能。 ctypes.string_at和ctypes.wstring_at函数。我知道ctypes.wstring_at用于制作一个unicode字符串,但ctypes.string_at用于???我们可以用哪种字符串?一个ascII字符串?或十六进制字符串??
    假设F()可以将结构转换为无符号的十六进制字节字符串:

  

    class d(Strcuture):
       _ fields _ = [("num",c_uint8),("char",c_char)]
    s = d(num = 129,char  = 'c')
    q = F(s)
    

如果我打印“q”,我想要一些这样的事情:
'\ XE1 \ X63'
0xe1是十六进制的129 0x63是十六进制的99 其中'c'在ascII中编码为99 再一次,我搜索另一个函数来获取“q”中每个元素的确切字节值,假设这个函数是wx()所以它可以返回这个:
    129如果写:wx(q [0])
    99如果我写:wx(q [1])

感谢

1 个答案:

答案 0 :(得分:0)

不需要F()wx()

class d(Structure):
  _fields_ = [("num",c_uint8),("char",c_char)]

  def __str__(self):
    return struct.pack('Bc', self.num, self.char)

  def __getitem__(self, ix):
    if ix == 0:
      return self.num
    if ix == 1:
      return ord(self.char)
    raise IndexError('structure index out of range')