首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

奇怪的有关问题,16bit二进制文件读取

2012-02-01 
奇怪的问题,16bit二进制文件读取我有一二进制文件,保存的数据为16bituint,用ultraEdit软件打开数据格式如

奇怪的问题,16bit二进制文件读取
我有一二进制文件,保存的数据为16bit   uint,用ultraEdit软件打开数据格式如下:
00000000h   FB   00   FE   00   04   01   00   01   FD   00   FD   00   FF   00   FE   00
00000000h   FF   00   FD   00   FE   00   FF   00   FF   00   FD   00   02   01   03   01
.........
我用如下代码读取数据
FILE   *pFile;
pFile=fopen(szFileName, "rb ");
unsigned   char   pBuf;
WORD   **gray;
gray=new   WORD*   [1024];
for(UINT   i=0;i <1024;i++)
{
*(gray+i)=new   WORD[1024];
}
for(i=0;i <1024;i++)
{
for(UINT   j=0;j <1024;j++)
{
fread((char*)&pBuf,2,1,pFile);
*(*(gray+i)+j)=(WORD)pBuf;
}
}
fclose(pFile);
CString   str;
str.Format( "%d ",*(*(gray+0)+0));
MessageBox(str);
出现问题如下:
第一个数字FB   00换算成十进制251,是对的
第二个数字FE   00换算成十进制254,也是对的,
第三个数字04   01读成了4,
第四个数字00   01读成了0,
...
发现一个规则:凡是后面一个字节00的,读取的都是正确的,如第一第二个数字
而后面是01的,要加上一个256,才与实际数字相符,如第三、第四个数字
为什么会这样,怎样改正我这个程序


[解决办法]

fread(&wordbuf,2,1,pFile);
error

unsigned char pBuf;
//改成WORD pBuf;或者BYTE pBuf[2];
pBuf是一个单字节变量,你却从文件中读取2个字节放入到一个指向单字节大小缓冲区的,肯定错误,而且危险,你的结果有问题,是因为把它当作字符串处理了,但实际上是一个意外,因为对指针缓冲区的运用就错了

热点排行