我的程序非常复杂,所以我无法解释所有这些,但我会尝试解释当前的情况。
我有一个.dat文件(其中729个,但本例中只有1个),我需要用一对包含十六进制值的字符串覆盖整个文件(即使我的新数据小于当前数据)。
以下是我程序的摘录:
ofstream xbox_final(xboxit->c_str(), ios::binary);
//other stuff
xbox_final.write("0a00000a00054c6576656c070006426c6f636b7300008000", 48);
xbox_final.write(new_bytes, new_bytes.length());
xbox_final.write(xboxbytes, xboxbytes.length());
xbox_final.close();
在ofstream中的“xboxit-> c_str()”是因为我正在从文件列表中输入和输出BUNCH文件,这是必要的,但如果有意义的话,我没有错误。
字符串“new_bytes”和“xboxbytes”包含十六进制值(000007000a0445等...)
现在我的程序刚刚写入文本文档。我需要它将该十六进制数据按顺序写入.dat文件。
我做了一些搜索,这解决了const char问题:
//other stuff
string header("0a00000a00054c6576656c070006426c6f636b7300008000");
WriteStr2BinFh( header, xbox_final);
WriteStr2BinFh( new_bytes, xbox_final);
WriteStr2BinFh( xboxbytes, xbox_final);
//other stuff
void WriteStr2BinFh( const std::string& St, std::ostream &out )
{
out.write( St.c_str(), St.size() );
}
在其他地方创建新的.dat文件也是一种可接受的选择。
我不能写出十六进制值,它们总是在DAT文件中显示为文本。
任何帮助将不胜感激:)
答案 0 :(得分:0)
一种方便的方式"在保持现有"模型的同时做到这一点#34;将"\x"
放在字符串中每个十六进制值的前面。然后编译器将它们视为实际值,而不是一对字符。
我的意思是:
std::cout << "4A4A" << std::endl;
会输出:
4A4A
而
std::cout << "\x4A\x4A" << std::endl;
会输出:
JJ
因为0x4A
是ascii字符J
的十六进制值。当然,如果您将此字符串写入文件,其含义将是相同的。
如果您想继续使用字符串来存储它,您需要更改构造函数,因为您的字符串将包含值0
。
string header("your_hex_chain", number_of_bytes_in_your_chain); // \x00 is one byte, for example
然而,使用struct
来存储标头的值会更容易,并且直接写入.dat文件。但是我不太了解你正在尝试做什么,所以......