2

我目前正在尝试存储一个包含二进制代码的字符串。

当我尝试将此字符串写入文本文件时,它只是以字符串格式存储每个 0 和 1 字符,而不是按照我的要求将其存储为 8 位块。这会导致文件比预期的大,考虑到它使用 8 位来存储每个 0 和 1。

我应该将字符串写入 .bin 文件而不是 .txt 文件吗?如果是这样,我将如何去做,如果可能的话,一个带有一些工作代码的例子。

感谢您提前提供任何建议。

   string encoded = "01010101";    
   ofstream myfile;   
   myfile.open ("encoded");   
   myfile <<  encoded;   
   myfile.close();   

澄清:我有一个由 1 和 0 组成的字符串(由霍夫曼树产生),我希望将这个字符串分成 8 位块,我希望将所述缝隙表示的每个字符写入压缩文件。

4

3 回答 3

1

我只是猜测,因为您没有显示任何代码,但似乎您有一个包含字符 '1''0'. 如果你把它写到一个文件中,它当然会是一个文本。您需要先将其转换为整数。

有关将任意基数的字符串转换为整数的函数,请参见例如std::stoi或。std::strtol

于 2013-03-23T14:21:59.647 回答
1

std::bitset可以将字符串转换为整数。

std::bitset<8> bits("01010101");
cout << bits.to_ullong();
于 2013-03-23T14:35:44.857 回答
0

我应该将字符串写入 .bin 文件而不是 .txt 文件吗?

如果你愿意的话……但这也没有什么不同。ofstream不关心文件名。只需将字符串转换为字节 ( uint8_t) 并将该字节写入文件:

string s = "10101010";
uint8_t byte = strtoul(s.c_str(), NULL, 2);
myfile << byte;
于 2013-03-23T14:22:38.920 回答