0

我有一个带有“HEX”值的 CString,它看起来像这样:“0030303100314a”

现在我想把它存储到一个 bin 文件中,这样如果我用十六进制编辑器打开它,我们显示的数据就会像字符串一样显示:00 30 30 30 31 00 31 4a

我未能正确准备数据。即使我使用“wb”模式,它也总是以标准 ASCII 格式保存。

提前致谢

4

2 回答 2

2

好的,您的误解是“wb”意味着所有输出都以“二进制”形式发生。这根本不是它的作用。有二进制输出操作,你应该以二进制模式打开文件才能使用它们,但你仍然必须使用二进制输出操作。这也意味着您必须将十六进制字符转换为整数值。

这就是我可能会如何完成你的任务

for (int i = 0; i + 1 < str.GetLength(); i += 2)
{
    int hex_value = 16*to_hex(str[i]) + to_hex(str[i+1]); // convert hex value
    fputc(hex_value, file);
}

static int to_hex(TCHAR ch)
{
    return ch >= '0' && ch <= '9' ? ch - '0' : ch - ('A' - 10);
}
于 2013-04-19T15:14:17.483 回答
0

该程序od将获取一个文件并将其转换为各种表示形式。例如,如果您说od -x myfile.bin, myfile.bin 的内容将打印为十六进制字节,就像您要查找的内容一样。你也可以让 C++ 做到这一点,但也许只是对数据进行后处理以使其看起来像你想要的那样更容易。

于 2013-04-19T14:42:23.933 回答