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

问题描述:

我正在使用chrint将二进制表示字符串转换为实数二进制值。当n超过256时,chr(n)失败

我所做的是

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

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

但是如果我给int的字符串在十进制中大于256会怎样?

任何解决方案?

PS: 我用CHR是我想n转换为字符串,这样我可以用它f.write()写入文件,究其原因。

而这个问题是从this question

chr()起源被定义为ASCII字符,必须小于256中值操作。如果您期待Unicode字符,则可以使用unichr()代替。

+1

如果该值大于256,将返回mod 256。 – dayuloli

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

+1

我不认为这就是他的目标。他想采用'01000001',转换为'65',然后将其转换为'a',并将其写入文件。 – dlev

+0

@Anulith,是的,dlev是对的。最终目标是将其写入文件。所以我的路线图是** 1 **,将字符串转换为int,** 2 **,int转换为字符串,以便将其写入文件,** 3 **,写入文件 – xiaohan2012

您可以使用不同的格式字符在struct模块中的pack()方法中给出的格式字符串可以轻松地获得长度为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()将返回的值写入文件。当读取或写入二进制数据到文件时,当您的文件为open()时,应该在参数值mode后附加'b'。

当试图转换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)