数字转换为字节
我有一个很大的数字,它基本上是由二进制组成的,就像一堵墙。请问我怎么才能把这些二进制位写入一个文件,作为原始字节,这样我就可以读取并理解这个数字,而不需要存储这个数字本身?另外,等这些原始字节写进文件后,我又该怎么解码它们呢?
二进制:0b101010011000010000
十进制:173584
字节:???
2 个回答
0
我不确定这是否能帮到你,或者是否直接回答了你的问题,不过……
如果你想在Python中专门访问这个文件,你可以使用一种叫做“pickle”的方法。大概是这样的:
>>> x = 0b0010101011010100101101010010101100001011101010001010101001010110110101011011111111010100100111110101001000100111011101101
>>> x
444781385027604204959187557780049645
>>> import pickle
>>> pickle.dump(x, open('trash.txt', 'wb'))
>>> pickle.load(open('trash.txt', 'rb'))
444781385027604204959187557780049645
这个大数字会被存储在一个叫做'trash.txt'的文件里,你可以随时去查看,但我觉得在Python以外的地方用处不大。
0
如果一串随机的、任意长度的二进制位(0和1)表示一个非负的二进制数,那么每8个这样的二进制位可以看作是一个256进制数的数字。这些数字可以作为8位字符的字符串写入文件中。当我们把这个字符串读回来后,可以通过反向操作将其解码回原来的数字。
以下内容是我从这个回答中得出的,回答的是关于Python中的62进制转换的问题。
def base256_encode(n): # non-negative integer to byte string
if n > 0:
arr = []
while n:
n, rem = divmod(n, 256)
arr.append(chr(rem))
return ''.join(reversed(arr))
elif n == 0:
return '\x00'
else:
raise ValueError("can't convert negative value to a byte string")
def base256_decode(s): # (big-endian) byte string to number
return reduce(lambda a, c: a*256 + ord(c), s, 0)
def binrepr(s): # utility
return ' '.join(('{:08b}'.format(ord(c))) for c in s)
n = 173584
print 'n:', n
en = base256_encode(n)
print 'binary bytes:', binrepr(en)
with open('rawbits.bin', 'wb') as outf:
outf.write(en)
with open('rawbits.bin', 'rb') as inf:
print 'read from file:', base256_decode(inf.read())
输出:
n: 173584
binary bytes: 00000010 10100110 00010000
read from file: 173584