关于十六进制文件数据读取
不一定正确,欢迎指正
功能:要读取一个文档的每一行16进制的数据(位宽为32位),把数据提出来使用。
问题:发现读取的都是字符,无法将其做数据使用。
解决方法:先读取每一行字符,然后换算成对应数字,最后相加即可。
代码如下:
#include <iostream>
#include <fstream>
#include <stdio.h>
#include<cmath>
using namespace std;
//将每一个字符换成对应的数字
int chartoint(char a)
{
switch (a)
{
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'a':
case 'A':
return 10;
case 'b':
case 'B':
return 11;
case 'c':
case 'C':
return 12;
case 'd':
case 'D':
return 13;
case 'e':
case 'E':
return 14;
case 'f':
case 'F':
return 15;
default:return 0;
}
}
//将一行字符换成对应16进制数
unsigned int tonumber(int a[8])
{
return pow(16, 7) * a[0] + pow(16, 6) * a[1] + pow(16, 5) * a[2] + pow(16, 4) * a[3] + pow(16, 3) * a[4] + pow(16, 2) * a[5] + pow(16, 1) * a[6] + pow(16, 0) * a[7];
}
int main()
{
char c[10];
int num[10] = { 0 };
unsigned int number;
ifstream inFile("test.txt", ios::in | ios::binary); //二进制载入文件
if (!inFile)
{
cout << "error" << endl;
return 0;
}
//连续以行为单位,读取 test.txt 文件中的数据
while (inFile.getline(c, 10))
{
cout << c << endl;
for (int i = 0; i < 8; i++)
{
num[i] = chartoint(c[i]);
}
number = tonumber(num);
printf("%x\n", number);
}
inFile.close();
return 0;
}
读取的数据如下:
10293032
12345678
12345abc
abcdfe12
总感觉有更简单的方法,但是我好像一直没有找到,如果有人知道,欢迎提醒!