我想知道一些事情,此时我使用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])
感谢
答案 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')