将字节作为字符串转换为实际字节类型

时间:2017-04-19 00:56:15

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

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

2 个答案:

答案 0 :(得分: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中)为:

enter image description here 那是吧,对吧?

P.S。这里是binariesFile.txt的内容:

01001010
10100101
01001011

<小时/> <小时/> ADDENDUM (2017-04-25)

根据OP的请求(参见注释),我在下面提供了两种转换方式的代码。代码读取.txt文件,其中01010101行类似,为.bin-fromTxt文件中的每一行写一个二进制文件.txt,其中包含单个字节,然后读取{{1}具有单个字节的文件并写入包含.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 文件包含:

enter image description here

和最后的binaryToByteString_Cg.bin-fromTxt

binaryToByteString_Cg.txt-fromBin

答案 1 :(得分:0)

假设通过二进制数字&#39;你的意思是整数:

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

只需使用内置int函数并将2作为基础,将字符串转换为整数。