这就是我的文件:
00 00 00 00 00 34 ....
我已经使用unsigned char
将其读取到fread
数组,但我不知道,我现在如何将其转换为unsigned integer
。
该数组如下所示:
0, 0, 0, 0, 0, 52
答案 0 :(得分:3)
这就是我开始工作的方式:
unsigned char table_index[6];
fread(table_index, 1, 6, file);
unsigned long long tindex = 0;
tindex = (tindex << 8);
tindex = (tindex << 8);
tindex = (tindex << 8) + table_index[0];
tindex = (tindex << 8) + table_index[1];
tindex = (tindex << 8) + table_index[2];
tindex = (tindex << 8) + table_index[3];
tindex = (tindex << 8) + table_index[4];
tindex = (tindex << 8) + table_index[5];
答案 1 :(得分:2)
您从48位值开始,但系统上可能没有48位整数类型。可能有一个64位类型,它可能是一个“很长”。
假设您的6个字节首先排序最重要,并且了解您需要长时间填写两个额外字节,您可能会执行以下操作:
long long myNumber;
char *ptr = (char *)&myNumber;
*ptr++ = 0; // pad the msb
*ptr++ = 0; // pad the 2nd msb
fread(ptr, 1, 6, fp);
现在你在myNumber
答案 2 :(得分:0)
如果文件中填充了48位整数,就像我假设你所说的那样,从char数组中,你可以这样做:
char temp[8];
unsigned char *data = //...
unsigned char *data_ptr = data;
vector<unsigned long long> numbers;
size_t sz = // Num of 48-bit numbers
for (size_t i = 0; i < sz; i++, data_ptr += 6)
{
memcpy(temp + 2, data_ptr, 6);
numbers.push_back((unsigned long long)*temp);
}
此算法假定数字已在文件中正确编码。它还假定了一个我无法用头脑命名的字节序。
答案 3 :(得分:0)
如果你想解释你的uchar数组的4个字节,就像一个uint那样:
unsigned char uchararray[totalsize];
unsigned int * uintarray = (unsigned int *)uchararray;
如果您希望将uchar数组的一个字节转换为一个uint,请执行以下操作:
unsigned char uchararray[totalsize];
unsigned int uintarray[totalsize];
for(int i = 0 ; i < totalsize; i++)
uintarray[i] = (unsigned int)uchararray[i];
答案 4 :(得分:0)
这就是你在谈论的吗?
// long long because it's usually 8 bytes (and there's not usually a 6 byte int type)
vector<unsigned long long> numbers;
fstream infile("testfile.txt");
if (!infile) {
cout << "fail" << endl;
cin.get();
return 0;
}
while (true) {
stringstream numstr;
string tmp;
unsigned long long num;
for (int i = 0; i < 6 && infile >> tmp; ++i)
numstr << hex << tmp;
if (cin.bad())
break;
cout << numstr.str() << endl;
numstr >> num;
numbers.push_back(num);
}
我使用您提供的输入(00 00 23 51 A4 D2
)对其进行了测试,并且该向量的内容为592553170
。