我有一个二进制文件,里面有十六进制值。例如1d 31 30 2e 30 30 2e 38 33 5f 75 66 6c 78 3b 30

我有一个c ++项目,在其中读取数据并使用ifstream处理信息。

现在,我想修改缓冲区中的值。例如。 1d应更改为0a

以下是我的代码。这里的问题是我得到的值是a而不是0a。如何将完美的十六进制数字插入缓冲区。

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]));
}


建议请。
谢谢。

最佳答案

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]));
}

07-24 14:09