我有一个带有'HEX'值的CString,看起来像这样:"0030303100314a"
现在我想把它存储到一个bin文件中,这样如果我用十六进制编辑器打开它,我们显示的数据就像字符串那样显示:00 30 30 30 31 00 31 4a
我没有正确准备数据。它总是保存在标准ASCII,即使我使用"wb"模式。
Thanks in advance
好吧,你的误解是"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++来完成此操作,但也许直接对数据进行后处理以使其看起来像您想要的那样更容易。