Python 当n超过256时,chr(n)失败
我正在使用Python 当n超过256时,chr(n)失败,python,max,chr,Python,Max,Chr,我正在使用chr和int将二进制表示字符串转换为实际二进制值 我所做的是 n=int('0101011',2) binary=chr(n) 然后,binary是表示字符串的实际二进制值 但是,如果我给int的字符串大于十进制的256怎么办 有解决办法吗 PS: 我使用chr的原因是我想将n转换为字符串,以便使用f.write()将其写入文件 这个问题源于,被定义为对ASCII字符进行操作,其值必须小于256。如果您需要Unicode字符,可以改用。定义为对ASCII字符进行操作,其
chr
和int
将二进制表示字符串转换为实际二进制值
我所做的是
n=int('0101011',2)
binary=chr(n)
然后,binary
是表示字符串的实际二进制值
但是,如果我给int的字符串大于十进制的256怎么办
有解决办法吗
PS:
我使用chr的原因是我想将n
转换为字符串,以便使用f.write()
将其写入文件
这个问题源于,被定义为对ASCII字符进行操作,其值必须小于256。如果您需要Unicode字符,可以改用。定义为对ASCII字符进行操作,其值必须小于256。如果您希望使用Unicode字符,可以改用。如果我理解您的问题,您希望将二进制字符串转换为整数值。这就是您在第一行代码中所做的。第二行只是将整数值转换为ASCII表中该值表示的字符。因此,例如,如果字符串为0110001,则在第一步中将转换为int值97。然后,第二步将97转换为ASCII字符“a”。如果随后尝试将此变量用作数字,它将转换回ing值97。所以,如果我理解了你的问题,那么在第1步之后,你实际上得到了你想要的数字。如果我理解了你的问题,你想要将二进制字符串转换成整数值。这就是您在第一行代码中所做的。第二行只是将整数值转换为ASCII表中该值表示的字符。因此,例如,如果字符串为0110001,则在第一步中将转换为int值97。然后,第二步将97转换为ASCII字符“a”。如果随后尝试将此变量用作数字,它将转换回ing值97。因此,如果我理解了你的问题,那么在第1步之后,你实际上已经有了你想要的数字。你可以在给
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()
将返回的值写入文件。在将二进制数据读取或写入文件时,在打开()文件时,应在模式
参数值后附加“b”。可以在提供给包()的格式字符串中使用不同的格式字符
方法,以轻松获取长度为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()
文件时,应将“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)
n=int('0001f600',16)
>>>联合国人权中心(北)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:unichr()参数不在范围内(0x10000)(狭窄的Python构建)
请注意错误中的窄Python构建
消息,这意味着Python构建时不支持宽unicode字符,但即使窄Python也可以绕过此限制(无需使用--enable unicode=ucs4
标志重新编译):
n=int('0001f600',16)
>>>s='\\U{:0>8X}'。格式(n)
>>>
“\\U0001F600”
>>>binary=s.decode('unicode-escape')
>>>打印(二进制)
在尝试转换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)
n=int('0001f600',16)
>>>联合国人权中心(北)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:unichr()参数不在范围内(0x10000)(狭窄的Python构建)
请注意错误中的窄Python构建
消息,这意味着Python构建时不支持宽unicode字符,但即使窄Python也可以绕过此限制(无需使用--enable unicode=ucs4
标志重新编译):
n=int('0001f600',16)
>>>s='\\U{:0>8X}'。格式(n)
>>>
“\\U0001F600”
>>>binary=s.decode('unicode-escape')
>>>打印(二进制)
我认为这不是他的目标。他想取
01000001
,将than转换为65
,然后将其转换为a
,并将其写入文件。@Anolith,是的,dlev是正确的。最终目标是将其写入文件。所以我的路线图是1,将字符串转换为int,2,int转换为字符串,这样就可以将其写入文件,3,写入文件我不认为这是他的目标。他想取01000001
,将than转换为65
,然后将其转换为a
,并将其写入文件。@Anolith,是的,dlev是正确的。最终目标是将其写入文件。所以我的路线图是1,将字符串转换为int,2,int转换为字符串,这样它可以写入文件,3,写入文件如果值大于256,将返回mod 256。如果值大于256,将返回mod 256。