【问题标题】:Python chr() function [closed]Python chr() 函数
【发布时间】: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


【解决方案1】:

你似乎想要

bytes(i%256 for i in data).hex()

计算结果为

'7463051000006c879333fbfb34fdb5'

这里不需要chr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多