如何在Python字节数组中区分并检测无符号字节?
问题解答
结论很明确:没办法仅通过遍历字节数组来区分其中的有符号字节和无符号字节,你看到的观点是完全正确的——有符号和无符号只是同一比特模式的不同解读方式,字节本身并不会携带“我是有符号/无符号”的标记信息。
举个直观的例子:
- 无符号整数
128通过int.to_bytes(1, "little", signed=False)生成的字节是b'\x80' - 有符号整数
-128通过int.to_bytes(1, "little", signed=True)生成的字节也是b'\x80'
这两个字节的比特序列完全一致,你根本没法从字节本身判断它原本代表的是无符号的128还是有符号的-128。
回到你的代码场景:你生成的无符号字节和有符号字节,只要原始整数对应的比特序列重合,生成的bytes对象就完全相同。当你把它们加入byteslist后,数组里只有纯字节数据,没有任何额外的类型标识。
如果一定要区分,只能通过额外记录元数据的方式解决:
- 生成字节时,不要只存字节本身,而是存储包含类型信息的元组,比如:
遍历的时候就能直接通过元组的第二个元素判断类型。byteslist.append( (unsigned_int, 'unsigned') ) byteslist.append( (signed_byte, 'signed') ) - 如果是处理外部传入的字节数组,必须依赖预先约定好的协议(比如文档明确规定第3个字节是有符号、第5个是无符号),按照协议规则来解读每个字节。
内容的提问来源于stack exchange,提问作者user21560229
相关产品推荐
相关产品推荐

