【发布时间】:2021-11-23 17:43:50
【问题描述】:
我有清单:
data = [116, 99, 5, 16, 0, 0, 108, -121, -109, 51, -5, -5, 52, -3, -75]
我需要为列表的每个值应用chr(i),但是在python中这个函数不支持负值(与PHP相比),但是我该如何实现?
例如在 Python 中,在 chr(i) 之后转换为十六进制,我得到:
final_list = [116, 99, 5, 16, 0, 0, 108, -121, -109, 51, -5, -5, 52, -3, -75]
result = bytearray_decode(final_list)
result = binascii.hexlify(result.encode())) #b'7463051000006cc287c29333c3bbc3bb34c3bdc2b5'
def bytearray_decode(arr):
out = []
for d in arr:
out.append(chr(d % 256))
return "".join(out)
在 PHP 结果中:
7463051000006c879333fbfb34fdb5
【问题讨论】:
-
chr(-5)应该是什么?如果不首先知道您要实现的是什么,就不可能实现它。 -
PHP 可能假定一个固定大小的整数,在这种情况下,您可以简单地将这些位视为无符号值。 Python 支持任意精度整数,因此
-5不会唯一映射到任何一个正整数。 -
理智的代码是否应该使用是值得商榷的;什么基于字符的流首先将任何内容表示为负整数?
-
显然负数代表虚构字符,呵呵。 :-)
-
.encode() 函数可以产生多字节字符 (UTF-8),它解释了输出字符串中的额外数据。例如:
chr((-121)%256).encode()-->b'\xc2\x87'。您可以通过明确说明编码方案使其产生单字节字符:binascii.hexlify(result.encode("latin-1"))
标签: python python-3.x chr