1

我正在使用chrandint将二进制表示字符串转换为真正的二进制值。

我所做的是

   n=int('0101011',2)
   binary=chr(n)

然后binary是表示字符串的真正二进制值。

但是如果我给 int 的字符串大于十进制的 256 怎么办?

有什么解决办法吗?

PS: 我使用 chr 的原因是我想转换n为字符串,以便我可以将其写入文件,使用f.write().

而这个问题源于这个问题

4

4 回答 4

8

chr()定义为对 ASCII 字符进行操作,其值必须小于 256。如果您期望 Unicode 字符,则可以unichr()改用。

于 2011-08-27T14:51:52.560 回答
1

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()

于 2011-08-27T16:05:36.943 回答
0

如果我理解您的问题,您想将二进制字符串转换为整数值。这就是您在第一行代码中所做的。第二行只是将一个整数值转换为 ASCII 表中该值表示的字符。因此,例如,如果字符串是 01100001,则在第一步中将转换为 int 值 97。然后第二步将 97 转换为 ASCII 字符“a”。如果您随后尝试将此变量用作数字,它将被转换回 ing 值 97。因此,如果我理解您的问题,您实际上在第 1 步之后就有了您想要的数字。

于 2011-08-27T15:03:32.657 回答
0

在尝试转换 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)

于 2017-12-08T22:02:52.817 回答