数字到字节

时间:2014-10-17 15:59:04

标签: python binary byte

我有一个很大的数字,它基本上是基数2中的二进制数。如何将这些位作为原始字节写入我可以读取并在不存储实际数字的情况下确定数字是什么?另外,如何在文件中解码所述原始字节?

二进制:0b101010011000010000 十进制:173584 byte:???

2 个答案:

答案 0 :(得分:0)

如果随机的,任意长的比特序列表示非负的基数2,则这些比特中的8个的组可以被认为是基数为256的数字,并且它们可以作为8的字符串写入文件。位字符。在读回字符串后反转该过程允许将该字符串解码回原始数字。

以下是我从this answer到问题Base 62 conversion in Python的结果。

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

答案 1 :(得分:0)

我不确定这是否有帮助,或者它是否直接回答了您的问题,但是......

如果你想在python中专门访问该文件,你可以腌制这个东西。像这样:

>>> x = 0b0010101011010100101101010010101100001011101010001010101001010110110101011011111111010100100111110101001000100111011101101
>>> x
444781385027604204959187557780049645
>>> import pickle
>>> pickle.dump(x, open('trash.txt', 'wb'))
>>> pickle.load(open('trash.txt', 'rb'))
444781385027604204959187557780049645

大号将存储在'trash.txt'文件中,可以在闲暇时阅读,但我不认为它会在python领域之外有用。