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