从.raw文件中读取数据

时间:2014-05-08 17:20:18

标签: c++ image

我有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 (...)

我想这是一个简单的问题,但我不知道如何正确地做到这一点。

1 个答案:

答案 0 :(得分:3)

ch变量声明更改为

   unsigned char ch;
// ^^^^^^^^

并按照documentation中的建议将fin.get(ch)更改为

while (fin >> ch)

修复此问题。

当您将它们用作整数数字时,

char值必须明确为signedunsigned。因此,如果值大于126,则将其解释为负数。转换为unsigned int的负数将设置这些值的高位。