【问题标题】:Converting byte as a string into actual byte type将字节作为字符串转换为实际的字节类型
【发布时间】:2017-04-19 00:56:14
【问题描述】:

我正在使用 Huffman 编码和解码算法在 python 中创建一个压缩项目。我必须创建一个小得多的文件。我正在使用从霍夫曼树中获得的字节值并将它们作为字符串文字(如 '0100101')写入文件中,我想将相同的数字转换为二进制数。

【问题讨论】:

    标签: algorithm python-3.x huffman-code


    【解决方案1】:

    有关如何将表示存储在一个文件中的二进制值的字符串列表作为字节写入另一个文件的示例,请参见下面的代码。请注意,两种变体(已使用的和已注释掉的)都会给您相同的结果。

    # lstStrBin = ['01001010','10100101','01001011']
    lstStrBin = open("binaryToByteString_Cg.txt").readlines()
    # byteArr = bytearray([int(strBin, 2) for strBin in lstStrBin])
    bytesString = bytes([int(strBin, 2) for strBin in lstStrBin])
    # print(byteArr) gives: bytearray(b'J\xa5K')
    with open('binaryToByteString_Cg.bin', "wb") as f:
        # f.write(byteArr)
        f.write(bytesString)
    

    binaryToBytes.bin(3字节长,SciTE显示)的内容为:

    就这样吧?

    附:这里是 binariesFile.txt 的内容:

    01001010
    10100101
    01001011
    



    ADDENDUM (2017-04-25):

    根据 OP 的请求(参见 cmets),我在下面提供了两种转换方式的两部分代码。该代码读取带有01010101 行的.txt 文件,为.txt 文件中的每一行写入一个带有单个字节的二进制文件.bin-fromTxt,然后读取带有单个字节的.bin-fromTxt 文件并写入一个.txt-fromBin 包含 01010101 类似行的文件。 在过程结束时,.txt-fromBin 文件将具有与 .txt 文件相同的内容,表明来回转换成功。

    with open('binaryToByteString_Cg.txt') as f_txt:
        bytesString = bytes([int(strBin, 2) for strBin in f_txt.readlines()])
        with open('binaryToByteString_Cg.bin-fromTxt', "wb") as f_bin: 
            f_bin.write(bytesString)
    
    with open('binaryToByteString_Cg.bin-fromTxt', "rb") as f_bin:
        bytesString = f_bin.read()
        with open('binaryToByteString_Cg.txt-fromBin', "w") as f_txt: 
            for byte in bytesString:
                f_txt.write( "{0:{fill}8b}\n".format(byte, fill='0'))
    

    如果binaryToByteString_Cg.txt 文件包含:

    01010101
    10101010
    00001111
    

    binaryToByteString_Cg.bin-fromTxt 文件包含:

    还有最后的binaryToByteString_Cg.txt-fromBin

    01010101
    10101010
    00001111
    

    【讨论】:

    • 因为我的文件包含更多元素,并且它向我抛出错误提示:ValueError: byte must be in range(0, 256)
    • 如何将它改回字符串? @克劳迪奥
    【解决方案2】:

    假设“二进制数”是指整数:

    >>> int('0100101', 2)
    37
    

    使用以2 为基础的内置int 函数将字符串转换为整数。

    【讨论】:

    • 这不是我想要的。我的意思是,我有一个字符串,例如“0100101”,我想将它作为位代码存储在二进制文件中。我需要转换方面的帮助
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多