【发布时间】:2021-03-09 08:09:07
【问题描述】:
尝试将二进制列表转换为有符号的 16 位小端整数
input_data = [['1100110111111011','1101111011111111','0010101000000011'],['1100111111111011','1101100111111111','0010110100000011']]
Desired Output =[[-1074, -34, 810],[-1703, -39, 813]]
这是我到目前为止所得到的。改编自:Hex string to signed int in Python 3.2?, Conversion from HEX to SIGNED DEC in python
results = []
for i in input_data:
hex_convert = [hex(int(x,2)) for x in i]
convert = [int(y[4:6] + y[2:4], 16) for y in hex_convert]
results.append(convert)
print (results)
output: [[64461, 65502, 810], [64463, 65497, 813]]
这很好用,但上面是无符号整数。我需要能够处理负值的有符号整数。然后我尝试了另一种方法:
results_2 = []
for i in input_data:
hex_convert = [hex(int(x,2)) for x in i]
to_bytes = [bytes(j, 'utf-8') for j in hex_convert]
split_bits = [int(k, 16) for k in to_bytes]
convert_2 = [int.from_bytes(b, byteorder = 'little', signed = True) for b in to_bytes]
results_2.append(convert_2)
print (results_2)
Output: [[108191910426672, 112589973780528, 56282882144304], [108191943981104, 112589235583024, 56282932475952]]
这个结果比第一个更疯狂。我知道我的方法是错误的,而且我一直无法理解二进制转换等并没有帮助,但我觉得我走在正确的道路上:
(b, byteorder = 'little', signed = True)
但无法找出我错在哪里。任何解释此概念的帮助将不胜感激。
【问题讨论】:
-
是的,也不起作用,它输出: [[52731, 57087, 10755], [53243, 55807, 11523]] 不是 [[-1074, -34, 810],[- 1703, -39, 813]]
-
你的输入是二进制还是别的?
-
它是一个(列表的)列表中的 16 位二进制,如上所示
-
您想要的输出似乎有错别字?我手动计算
[[-1075, -34, 810], [-1073, -39, 813]],这也是我的代码给出的。
标签: python binary hex endianness