我有一个我正在解析的位图图像,我需要能够打开文件并存储第一个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)