数字转换为字节

0 投票
2 回答
1736 浏览
提问于 2025-04-28 03:50

我有一个很大的数字,它基本上是由二进制组成的,就像一堵墙。请问我怎么才能把这些二进制位写入一个文件,作为原始字节,这样我就可以读取并理解这个数字,而不需要存储这个数字本身?另外,等这些原始字节写进文件后,我又该怎么解码它们呢?

二进制: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

撰写回答