我有十六进制的数据文件,我想将它们从小端转换为大端,但我在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并将其转换为十进制。 我该怎么做?
更新:我认为人们误解了这个问题。我只是想要一种方法来读取包含六进制值的二进制文件,并转移单独。这个问题在文本上很难描述,但无论如何,感谢那些评论可能解决方案的人。
答案 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();
}