我正在使用chr
andint
将二进制表示字符串转换为真正的二进制值。
我所做的是
n=int('0101011',2)
binary=chr(n)
然后binary
是表示字符串的真正二进制值。
但是如果我给 int 的字符串大于十进制的 256 怎么办?
有什么解决办法吗?
PS:
我使用 chr 的原因是我想转换n
为字符串,以便我可以将其写入文件,使用f.write()
.
而这个问题源于这个问题
pack()
您可以在模块中给方法的格式字符串中使用不同的格式字符,struct
以便轻松获取长度为 1 到 8 个字节的有符号或无符号整数的对应二进制表示字符串。
>>> from struct import pack
>>> pack('B', 255)
'\xff'
>>> pack('H', 257)
'\x01\x01'
>>> pack('Q', 9223372036854775807)
'\xff\xff\xff\xff\xff\xff\xff\x7f'
如果需要,可以使用将返回的值写入文件f.write()
。当读取或写入二进制数据到文件时,您应该在文件时将“b”附加到mode
参数值open()
。
如果我理解您的问题,您想将二进制字符串转换为整数值。这就是您在第一行代码中所做的。第二行只是将一个整数值转换为 ASCII 表中该值表示的字符。因此,例如,如果字符串是 01100001,则在第一步中将转换为 int 值 97。然后第二步将 97 转换为 ASCII 字符“a”。如果您随后尝试将此变量用作数字,它将被转换回 ing 值 97。因此,如果我理解您的问题,您实际上在第 1 步之后就有了您想要的数字。
在尝试转换 unicode 值时,您可能会遇到许多问题。所以unichr
也不总是可以使用,例如:
>>> n = int('0001f600', 16)
>>> unichr(n)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: unichr() arg not in range(0x10000) (narrow Python build)
注意narrow Python build
错误中的消息,这意味着 Python 是在不支持宽 unicode 字符的情况下构建的,但即使是窄 Python 也可以绕过这个限制(无需使用--enable-unicode=ucs4
标志重新编译):
>>> n = int('0001f600', 16)
>>> s = '\\U{:0>8X}'.format(n)
>>> s
'\\U0001F600'
>>> binary = s.decode('unicode-escape')
>>> print(binary)