我有8位数据的灰度RAW文件,我试图用简单的程序读取数据:
#include <fstream>
#include <iostream>
using namespace std;
int main(){
char fileName[80] = "TEST.raw";
//char buffer[255];
ifstream fin(fileName);
char ch;
int i = 0;
while (fin.get(ch)){
cout << (unsigned int)ch << " ";
i++;
}
cout << endl;
cout << "i = " << i;
fin.close();
cin >> ch;
}
某些值高于某个特定值,我得到奇怪的输出。当我得到这样的东西时:
(...) 34 34 34 36 43 59 88 123 151 166 (...)
我有:
(...) 34 34 34 36 43 59 88 123 4294967191 4294967206 (...)
我想这是一个简单的问题,但我不知道如何正确地做到这一点。
答案 0 :(得分:3)
将ch
变量声明更改为
unsigned char ch;
// ^^^^^^^^
并按照documentation中的建议将fin.get(ch)
更改为
while (fin >> ch)
修复此问题。
当您将它们用作整数数字时, char
值必须明确为signed
或unsigned
。因此,如果值大于126,则将其解释为负数。转换为unsigned int
的负数将设置这些值的高位。