首页 文章

如何读入二进制数据并转换为unsigned char(C)

提问于
浏览
6

我有一个以二进制数据保存的原始图像文件(无编码) . 我想读取文件并将值转换为unsigned char . 但我不知道如何开始这样做 . 每个文件包含640x480字节 . 每个像素是8位 .

我在这里使用了C帮助页面:http://www.cplusplus.com/doc/tutorial/files/,但是当我在宣传数据时,它似乎显示了相同的二进制/非人类可读字符 . 有人可以建议吗?到目前为止,这是我的代码:

#include <iostream>
    #include <fstream>
    using namespace std;

ifstream::pos_type size;
char * memblock;

int main () {
  ifstream file ("imageData.raw", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);

    cout << "the complete file content is in memory";

    for (int l=0; l<size; l++){
    cout << " memblock[] is = " << (unsigned char)memblock[l] << " index was l = " << l << endl;
    }

    file.close();


    delete[] memblock;
  }
  else cout << "Unable to open file";
  return 0;
}

以下是输出的示例捕获:

memblock[] is = ▀ index was l = 2937
 memblock[] is = E index was l = 2938
 memblock[] is = τ index was l = 2939
 memblock[] is = C index was l = 2940
 memblock[] is = ┘ index was l = 2941
 memblock[] is = B index was l = 2942
 memblock[] is = ╬ index was l = 2943
 memblock[] is = D index was l = 2944
 memblock[] is = ┼ index was l = 2945
 memblock[] is = C index was l = 2946
 memblock[] is = ╝ index was l = 2947
 memblock[] is = B index was l = 2948
 memblock[] is = ┤ index was l = 2949
 memblock[] is = B index was l = 2950
 memblock[] is = ¿ index was l = 2951
 memblock[] is = > index was l = 2952
 memblock[] is = í index was l = 2953
 memblock[] is = ; index was l = 2954
 memblock[] is = £ index was l = 2955
 memblock[] is = 6 index was l = 2956
 memblock[] is = á index was l = 2957
 memblock[] is = 4 index was l = 2958
 memblock[] is = Ñ index was l = 2959
 memblock[] is = 7 index was l = 2960
 memblock[] is = ╡ index was l = 2961

1 回答

  • 9
    unsigned char* memblock; // change declaration of memblock
    
    ...
    
    memblock = new unsigned char[size]; // change to unsigned char
    file.seekg (0, ios::beg);
    file.read ((char*)memblock, size); // cast to a char* to give to file.read
    

    要打印数值而不是字符,请在打印前强制转换为 int .

    (int) memblock[l]
    

相关问题