2017-01-24 20 views
0

16進値を持つバイナリファイルがあります。たとえば1d 31 30 2e 30 30 2e 38 33 5f 75 66 6c 78 3b 30バッファに16進数形式の値を挿入します。

私はifstreamを使用してデータを読み取り、処理するC++プロジェクトを持っています。

バッファーの値を変更します。例えば。 1d0aに変更する必要があります。

以下は私のコードです。ここでの問題は、0aの代わりにaという値が得られることです。バッファに完全な16進数字を挿入するにはどうしたらいいですか?

void TestMethod() 
{ 
    std::ifstream m_inputFile; 
    m_inputFile.open("c:\\temp.bin", std::ofstream::in | std::ofstream::binary); 

    char* buff = new char[300]; 
    m_inputFile.read(buff, 300); 
    UpdateData(buff, 10); 
} 

void UpdateData(char* buffer, int val) 
{ 
    int POSITION = 32; 

    char capID[2]; 
    itoa(val, capID, 16); 

    std::memcpy(&buffer[POSITION], &capID, sizeof(buffer[POSITION])); 
} 

提案pls。おかげさまで

+0

「\ x1D」と「 'x0A」は16進数ではなく制御文字です。 '' \ x2E''は ''。 ''と同じです。等々。この例の文字の多くは16進数ではありません。 「\ x0A」と「\ xA」はまったく同じです。私はあなたが混乱するかもしれないと思う。 – AlexP

+0

完全なバイナリデータを追加しませんでした。これらは無視されるヘッダーの一部です。 – killer

答えて

1
void UpdateData(char* buffer, int val) 
{ 
    int POSITION = 32; 
    char capID[3]; // 1 extra for terminating zero!!!! 
    // use good old sprintf 
    sprintf(capID, "%02x", (val & 0xFF)); 
    std::memcpy(&buffer[POSITION], &capID, sizeof(buffer[POSITION])); 
} 
+0

多くのありがとう@wmc。私の要求に完全に対応します。 – killer

関連する問題