我目前正在尝试存储包含二进制代码的字符串。
当我尝试将此字符串写入文本文件时,它只是以字符串格式存储每个0和1字符,而不是根据需要将其存储为8位块。这会导致文件比预期的大,考虑到它使用8位来存储每个0和1.
我应该将字符串写入.bin文件而不是.txt文件吗? 如果是这样,我将如何进行此操作,如果可能的话,还有一些工作代码的示例。
我对你提前提出的建议表示感谢。
string encoded = "01010101";
ofstream myfile;
myfile.open ("encoded");
myfile << encoded;
myfile.close();
澄清: 我有一个由1和0组成的字符串(由霍夫曼树组成),我希望将这个字符串分成8位块,我希望将所述chink表示的每个字符写入压缩文件。
答案 0 :(得分:1)
我只是猜测,因为你没有显示任何代码,但似乎你有一个包含字符 '1'
和'0'
的字符串。如果你把它写到文件当然它将作为文本。您需要先将其转换为整数。
参见例如std::stoi
或std::strtol
用于将任意基数字符串转换为整数的函数。
答案 1 :(得分:1)
std::bitset
可以将字符串转换为整数。
std::bitset<8> bits("01010101");
cout << bits.to_ullong();
答案 2 :(得分:0)
我应该将字符串写入.bin文件而不是.txt文件吗?
如果你愿意......但这也不会有什么不同。 ofstream
不关心文件名。只需将字符串转换为字节(uint8_t
)并将该字节写入文件:
string s = "10101010";
uint8_t byte = strtoul(s.c_str(), NULL, 2);
myfile << byte;