我正在使用chr
和int
将二进制表示字符串转换为实际二进制值。
我做的是
n=int('0101011',2)
binary=chr(n)
然后binary
是表示字符串的实际二进制值。
但是如果我给int的字符串大于256十进制呢?
任何解决方案?
PS:
我使用chr的原因是我想将n
转换为字符串,以便我可以使用f.write()
将其写入文件。
这个问题来自this question
答案 0 :(得分:7)
答案 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}}