我想将一系列二进制字符串写入文件,其长度以位而不是字节表示。考虑两个字符串 s1 和 s2,二进制分别为 011 和 01011。在这种情况下,输出文件的内容必须为:01101011(1 个字节)。我正在尝试以最有效的方式执行此操作,因为我有几百万个字符串需要连接,总共有几 GB 的输出。
最佳答案
C++ 无法直接使用位,因为它的目标是成为轻层 硬件之上,而硬件本身并不是面向位的。最低限度 在一次操作中可以读/写的位数是一个字节(通常是 8 位)。
此外,如果您需要进行磁盘 I/O,最好以 block 的形式写入数据,而不是一次写入一个字节。该库有一些缓冲,但是缓冲越早,代码速度就越快(传递数据涉及的代码越少)。
一个简单的方法可能是
unsigned char iobuffer[4096];
int bufsz; // how many bytes are present in the buffer
unsigned long long bit_accumulator;
int acc_bits; // how many bits are present in the accumulator
void writeCode(unsigned long long code, int bits) {
bit_accumulator |= code << acc_bits;
acc_bits += bits;
while (acc_bits >= 8) {
iobuffer[bufsz++] = bit_accumulator & 255;
bit_accumulator >>= 8;
acc_bits -= 8;
if (bufsz == sizeof(iobuffer)) {
// Write the buffer to disk
bufsz = 0;
}
}
}
关于c++ - 连接二进制位大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25698007/