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

Insert a value in buffer in hex format

本文关键字:一个 插入 缓冲区 十六进制 格式      更新时间:2023-10-16

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