0

私のプログラムはかなり長くて複雑なので、すべてを説明することはできませんが、私の現在の状況を説明しようと思います。

私は .dat ファイル (729 のうち、この例では 1 つだけ) を持っており、ファイル全体を (新しいデータが現在のデータよりも小さい場合でも) 16 進値を含むいくつかの文字列で上書きする必要があります。

これが私のプログラムのスニペットです:

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」には 16 進値が含まれます (000007000a0445 など.​​..)

今のところ、私のプログラムはテキスト ドキュメントに書き込んでいます。その 16 進データをその順序で .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 ファイルを作成することも、許容されるオプションです。

16 進数値を書き込めません。常に DAT ファイルにテキストとして表示されます。

どんな助けでも大歓迎です:)

4

1 に答える 1

0

現在の「モデル」を維持しながら「簡単に」それを行う方法"\x"は、文字列のすべての16進値の前に置くことです。コンパイラは、それらを文字のペアとしてではなく、実際の値として扱います。

私が意味するのは:

std::cout << "4A4A" << std::endl;

出力します:

4A4A

一方

std::cout << "\x4A\x4A" << std::endl;

出力します:

JJ

ascii0x4A文字の 16 進数値ですJ。もちろん、この文字列をファイルに書き込んでいる場合も、意味は同じです。

引き続き文字列を使用して保存する場合は、文字列に value が含まれるため、コンストラクターを変更する必要があります0

string header("your_hex_chain", number_of_bytes_in_your_chain); // \x00 is one byte, for example

structただし、 a を使用してヘッダーの値を保存し、直接 .dat ファイルに書き込む方がはるかに簡単です。しかし、私はあなたが何をしようとしているのかについて詳しく知りません。

于 2013-05-09T02:35:42.140 に答える