【发布时间】:2023-01-29 22:40:16
【问题描述】:
我有一个 bytes 元素。我的字长是 1,一个字节。内容可以是b'\xff\xff\x01',意思是[-1, -1, 1]。
我想将它从字节形式转换为 int 表示形式。 从逻辑上讲,我的尝试是:
ints = [int.from_bytes(j, byteorder='little', signed=True) for j in b'\xff\xff\x01']
类型错误:无法将“int”对象转换为字节
但是,这不起作用,因为
for j in bytes()将 bytes 元素直接转换为 intj。然而,这是一个未签名的转换,我需要签名。如何将我的字节逐字节转换为带符号的整数。
【问题讨论】:
-
“然而,这是一个未签名的转换,我需要签名。”您是否尝试过计算以转换为 2s 补码?
-
@quamrana 这样做真的回答问题?
-
ints = [int.from_bytes(bytes([j]), byteorder='little', signed=True) for j in b'\xff\xff\x01'] -
@realSamy 随时发布您的答案,我会接受它,因为它比我想出的 hack 更好
-
“真的没用,需要这样一个 hacky 解决方案来保持正确的类型信息”——Python 3.x 正确识别(除了一些看起来非常愚蠢的遗留方法,如
zfill)字节是不是文字. Python 没有单独的“字符”类型,因此索引一个字符串以给出另一个字符串是有意义的。字节是原始数据;一个单独的字节确实有一个自然表示作为相应的数值——在 Python 中拼写为int。直观地,索引到“一维”序列应该给出一个标量值。 3.x 修复了这个问题。
标签: python python-3.x signed