我有一个大的字符串(122k长),为0和1s(010011101 ...),需要将它们作为0和1而不是它们的字符表示形式写入二进制文件。
我尝试过的事情:
理想情况下,我宁愿使用标准库。谢谢您的提前帮助。
答案 0 :(得分:2)
您可以将每个八位组合成一个字符:
int n = 0;
uint8_t value = 0;
for(auto c : str)
{
value |= static_cast<unint8_t>(c == '1') << n;
if(++n == 8)
{
// print value or buffer it elsewhere, if you want
// to print greater chunks at once
n = 0;
value = 0;
}
}
if(n != 0)
{
// one partial byte left
}
字节有固定数量的位(通常为8位),您不能只丢弃它们,它们会会进入您的文件。因此,当再次解码时,您需要某种方式来指定要丢弃多少位。您可以附加一个字节,最后一个字节中有多少位有效,可以通过某种方式对总位数进行编码(并可以检查是否已读取足够的字节),...