python - 将二进制字符串转换为 bool 数组并输出二进制文件

标签 python linux string bash binary

我有一个很大的文本文件(3 到 6 GB),只有两个 ASCII 字符。我想将此字符串转换为 bool 输出,可以将其编写为简单的二进制文件。

下面是一个 568 字节 ASCII 的玩具“test.bin”文件。有70*8,560个字符。每个“0”和“1”都是由 1 个字节编码的字符。我希望最终输出减少为 560 位文件(70 字节)文件。

0111000110000000101000100000100100011111010010101000001001010000111000
1001100011010100001101110000100010000010000000000001011000010011111100
0100001000010000010000010111011101011111000111111000111001100010100011
0011101000100001111111000001111110111111101101100000011000010101100001
0000000110110001000000000001000011110100000101101000001000010001010011
1101101111010101011110001110000010011001100101101101000111111101110101
1000001100101101010111110111110101100000000011001000100000000011001110
0101101001110010011110000100101001001111010011100100001001111111100110
...

我找到了几种相反的解决方案,将二进制文件转换为 ASCII,但不是其他方式,或 incorrectly expanding将二进制字符转换为 ASCII 编码 1 --> 0011001, 0 --> 0011000。 I found a C++ solution ,但我正在寻找一个简单的 bash 或 python 脚本。

========================================================

基于 here 的小修正的 Bash 解决方案

cat test.bin | tr -d '[\n]' | perl -lpe '$_=pack"B*",$_' > true_binary.txt

最佳答案

我认为这可能作为评论更好,但我显然还没有这种特权。如果您使用的是 Python 3,这对您来说似乎是一个很好的相关解决方案:https://stackoverflow.com/a/21220966/7006570

不同之处在于,在该问题中,询问者希望以相反的顺序排列,但您不需要,因此请忽略 [::-1] 部分。然后你最终得到一个字节对象,你可以将其写入文件。当然,长度并不总是 4 个字节。

bitstring = "10111111111111111011110"
bits = int(bitstring, 2)
bytes_ = bits.to_bytes((bits.bit_length()+7)//8, 'little')

然后保存

with open('/tmp/output', 'wb') as f:
    f.write(bytes_)

关于python - 将二进制字符串转换为 bool 数组并输出二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454580/

相关文章:

linux - 30 分钟内每 5 分钟检查一次循环中的特定进程

c++ - cmake 链接到共享库而不使用完整路径

c++ - C++返回字符数组相减的结果

python - 如何在Python中绘制多项式逻辑回归的决策边界?

python - 类型错误 : train_test_split() got an unexpected keyword argument 'test_size'

linux - 使用 "echo"通过管道传递值

c++ - 有没有更好的方法来解析这样的一行文本?

c - 如何用 16 位整数初始化 C 字符串?

Python while循环没有中断

java - 创建 kik 聊天机器人