如何从文件中读取unsigned short?

101*_*101 4 c c++ file-io

我有一个我正在解析的位图图像,我需要能够打开文件并存储第一个unsigned short.

我尝试使用FILE和fscanf()完成此操作,但fscanf()始终失败并返回0(成功读取的项目数).

FILE *pFile = fopen ( fileName->c_str() , "r" );

if ( pFile == NULL )
{
    cerr << "couldn't open file ; exiting..." << endl;
    exit(0);
}

unsigned short seed;
fscanf (pFile, "%hu", &seed);
Run Code Online (Sandbox Code Playgroud)

有谁知道我可以采取的另一种方法(可能是ifstream?)或者可能只是给我一些指示?任何帮助将不胜感激.

谢谢.

wal*_*lyk 12

不要使用像*scanf这样的格式化函数; 他们期望数据的字符表示,*printf函数的补充,它将值转换为字符表示.

unsigned val;
f = fopen (filename, "rb");
if (fread (&val, 1, sizeof (val), f) != sizeof (val))
    // error
Run Code Online (Sandbox Code Playgroud)

最大的问题是如何编写文件.如果编写器的字节顺序与运行的计算机不同,则应使用显式字节码代码:

unsigned val;
unsigned char buf[2];
f = fopen (filename, "rb");
if (fread (buf, 1, sizeof (buf), f) != sizeof (buf))
    // error
else {
//  val = (buf [0] << 8) | buf [1];   // for big endian written file
    val = (buf [1] << 8) | buf [0];   // for little endian written file
}
Run Code Online (Sandbox Code Playgroud)

  • 那应该是`unsigned char buf [2];`和`sizeof buf`而不是`sizeof(val)`. (2认同)