如何从C ++中的小端二进制文件中读取单个十六进制字符?

时间:2018-04-29 15:18:21

标签: c++

我有十六进制的数据文件,我想将它们从小端转换为大端,但我在C ++中遇到了这个问题。 C ++将 2 hexa值视为一个为char 创建一个字节,并始终输出十进制等效于 2组合六进制值但我不希望这样。

假设我正在读小日期中的8字节日期:

e218 70d2 0e00 0000

代码:

char buffer;
for(int i = 0; i<BYTE_SIZE; ++i){
    infile>>buffer;
    cout<<"Read In Int = "<<(unsigned int)buffer<<endl;
    cout<<"Read as Hex= "<<hex<<(int)buffer<<endl;


}

输出:

Read as Int= 226

Read as Hex= e2
-------------End of First Iter-------------------------
Read as Int= 18

Read as Hex= 18
...

因此,如果您注意到基数为16的e2连接为一个实体。转换为int时,得到:14 * 16 + 2 = 226.我想读 e 然后只读 等等上.... 我的主要目标是将其翻转并将其读作18e2并将其转换为十进制。 我该怎么做?

更新:我认为人们误解了这个问题。我只是想要一种方法来读取包含六进制值的二进制文件,并转移单独。这个问题在文本上很难描述,但无论如何,感谢那些评论可能解决方案的人。

1 个答案:

答案 0 :(得分:-2)

使用位进行解决并使用以下方法解决:

预处理:

vector<bitset<64>> input;
for(int i = 0; i<SIZE; ++i){
    infile>>buffer;
    input.push_back(bitset<64>(buffer));


}

这是功能:

unsigned long convert(vector<bitset<64>> input)
{
    bitset<64> data ;
    for(int i = input.size()-1; i>-1; --i)
        data=data|(input[i]<<i*8);
    return data.to_ullong();
}