转换缓冲区表示 int little endian 列表 Python class
Convert buffer repesents list of int little indian Python class
我正在尝试从表示为字符串的缓冲区中获取数据,
示例:
得到:
str = "0004000001000000020000000A000000"
class MyData:
length
some_data
array_data
buf_data
data = parse(str)
除了:
length=1024, some_data=1, array_data=[2,10], buf_data="000000020000010"
解释:
length=1024,因为 8 个数字“00040000”用小印度语表示一个十六进制数
和其他人一样的想法,
“00040000 01000000 0200000 00A000000”
1024、1、2、10
有什么想法吗?
我有一些解决方案,但是太乱了,不容易支持
这是一种方法:
class MyData:
mmap = [16**1, 16**0, 16**3, 16**2, 16**5, 16**4, 16**7, 16**6]
def __init__(self, buffer):
self.buffer = buffer
self.integers = []
def get_integers(self):
if len(self.integers) == 0:
for i in range(0, len(self.buffer), 8):
a = 0
for x, y in zip(self.buffer[i:i+8], self.mmap):
a += int(x, 16) * y
self.integers.append(a)
return self.integers
mydata = MyData('0004000001000000020000000A000000')
print(mydata.get_integers())
输出:
[1024, 1, 2, 10]
注意:这专门针对 32 位无符号值
我正在尝试从表示为字符串的缓冲区中获取数据,
示例:
得到:
str = "0004000001000000020000000A000000"
class MyData:
length
some_data
array_data
buf_data
data = parse(str)
除了:
length=1024, some_data=1, array_data=[2,10], buf_data="000000020000010"
解释:
length=1024,因为 8 个数字“00040000”用小印度语表示一个十六进制数
和其他人一样的想法, “00040000 01000000 0200000 00A000000”
1024、1、2、10
有什么想法吗?
我有一些解决方案,但是太乱了,不容易支持
这是一种方法:
class MyData:
mmap = [16**1, 16**0, 16**3, 16**2, 16**5, 16**4, 16**7, 16**6]
def __init__(self, buffer):
self.buffer = buffer
self.integers = []
def get_integers(self):
if len(self.integers) == 0:
for i in range(0, len(self.buffer), 8):
a = 0
for x, y in zip(self.buffer[i:i+8], self.mmap):
a += int(x, 16) * y
self.integers.append(a)
return self.integers
mydata = MyData('0004000001000000020000000A000000')
print(mydata.get_integers())
输出:
[1024, 1, 2, 10]
注意:这专门针对 32 位无符号值