我有一个带有“HEX”值的 CString,它看起来像这样:“0030303100314a”
现在我想把它存储到一个 bin 文件中,这样如果我用十六进制编辑器打开它,我们显示的数据就会像字符串一样显示:00 30 30 30 31 00 31 4a
我未能正确准备数据。即使我使用“wb”模式,它也总是以标准 ASCII 格式保存。
提前致谢
我有一个带有“HEX”值的 CString,它看起来像这样:“0030303100314a”
现在我想把它存储到一个 bin 文件中,这样如果我用十六进制编辑器打开它,我们显示的数据就会像字符串一样显示:00 30 30 30 31 00 31 4a
我未能正确准备数据。即使我使用“wb”模式,它也总是以标准 ASCII 格式保存。
提前致谢
好的,您的误解是“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);
}
该程序od
将获取一个文件并将其转换为各种表示形式。例如,如果您说od -x myfile.bin
, myfile.bin 的内容将打印为十六进制字节,就像您要查找的内容一样。你也可以让 C++ 做到这一点,但也许只是对数据进行后处理以使其看起来像你想要的那样更容易。