当n超过256时,chr(n)失败

时间:2011-08-27 14:49:47

标签: python max chr

我正在使用chrint将二进制表示字符串转换为实际二进制值。

我做的是

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

然后binary是表示字符串的实际二进制值。

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

任何解决方案?

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

这个问题来自this question

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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()将返回的值写入文件。在将二进制数据读取或写入文件时,应在mode文件时将“b”附加到open()参数值。

答案 2 :(得分:0)

如果我理解你的问题,你想将二进制字符串转换为整数值。这就是你在第一行代码中所做的。第二行只是将整数值转换为ASCII表中该值表示的字符。因此,例如,如果字符串是01100001,则在第一步中将转换为int值97。然后,第二步将转换97为ASCII字符'a'。如果您然后尝试将此变量用作数字,则会将其转换回97的输入值。因此,如果我理解您的问题,那么在步骤1之后您实际上已获得所需的数字。

答案 3 :(得分:0)

尝试转换unicode值时,可能会遇到很多问题。因此,并非总是可以使用narrow Python build,例如:

--enable-unicode=ucs4

注意错误中的>>> n = int('0001f600', 16) >>> s = '\\U{:0>8X}'.format(n) >>> s '\\U0001F600' >>> binary = s.decode('unicode-escape') >>> print(binary) 消息,这意味着Python的构建没有支持广泛的unicode字符,但即使是狭窄的Python也可以解决这个限制(无需使用{{1}}标志重新编译) :

{{1}}