以十六进制格式在缓冲区中插入值

时间:2017-01-24 12:35:48

标签: c++ windows

我有一个二进制文件,里面有十六进制值。例如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]));
}

建议请。 感谢。

1 个答案:

答案 0 :(得分: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]));
}