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