如何在 C++ 中将文本转换为二进制(和反向)?

How to convert Text to Binary (and Reverse) in C++?

好的,这将是一个非常初学者的问题,虽然我似乎找不到关于这个主题的好的资源。

我要的很简单。获取一个字符串(或 char*)并将其转换为二进制文件,我可以将其存储在系统中的某个位置。
然后,稍后 ,我希望能够读取该二进制文件并将其转换回字符串(或 char*)。

现在……
每当我搜索这个时,我经常会想到 Serialisation 的概念,这就是 basically 我想要的。

虽然有一个问题,但通常建议使用“Boost-Serialisation”。其中 (IMO) 对于将简单文本转换为二进制和将简单二进制转换为文本来说非常繁重。 (好吧,我知道这并不容易,但你明白了

得到 是处理此问题的更简单方法。我希望你能帮我找到它。 :D


非常感谢您的回答。

你只需要使用位操作技巧。 C 和 C++ 都有允许您通过逻辑门 运行 整数值的运算符。例如:

x = 3 & 1 ;

会将 x 设置为 1,因为当您执行 AND 运算时,您会从 & 的左侧获取每一位,并从 & 的右侧获取相应的位,然后将它们放入 And operation.

您也可以进行位移。将位移动某个数字的位置。例如:

y = 1 << 2;

将整数 1 中的所有位移动两位,新的最右边的位将设置为零。

所以这样做的方法是:对于字符串中的每个字节,用 128 做一个 AND 运算,然后如果它的值是零那么这意味着最左边的位是零(你打印“ 0"),如果不是,则值为 1(因此打印“1”)。然后将其向左移动一位并再次进行操作。这样做八次,您就将一个字节转换为二进制。

您可以使用 ofstream/ifstream。它们的工作方式与 cout/cin 类似,只是它读取和写入文件而不是控制台。也许这个 link 有帮助:https://www.cplusplus.com/doc/tutorial/files/

How to convert Text to Binary (and Reverse)

无事可做。文本是已经数据,任何现代计算机中所有数据在内存中的表示始终是二进制的。

你需要知道你的意思。如果您只是想“将其写入文件”(以任何表示形式),那么就这样做:

std::string my_text;
std::ofstream ofs("myfile.bin", std::ios::binary);
ofs.write(my_text.data(), my_text.size());

如果您需要一些特定 表示(不同的字符集、编码甚至(存档)文件格式),您可能需要进行该转换。

哦,以免我忘记,回读:

std::ifstream ifs("myfile.bin", std::ios::binary);
std::string my_text(std::istreambuf_iterator<char>(ifs), {});