当前位置: 代码迷 >> C++ Builder >> 关于读取2进制数据后转换成16进制显示出错的有关问题
  详细解决方案

关于读取2进制数据后转换成16进制显示出错的有关问题

热度:3226   发布时间:2013-02-26 00:00:00.0
关于读取2进制数据后转换成16进制显示出错的问题
本帖最后由 tianshanfe 于 2013-01-31 12:38:40 编辑
我有一个文件,用winhex打开显示是如下的
4D 5A 90 00 03 00 00 00……………………………………
我现在要读取前面4个16进制数据,我是以2进制方法读取后,再转换成16进制显示出来,不过显示出来的答案有点问题,4D 5A 90 00 这4个没问题能读出来,但是后面怎么还跟着一个"Text"呢?
显示的结果是“4D5A9000Text”
代码如下
          int FileHandle;//定义文件句柄
char *DateData;//定义读取指针
DateData= new char[4];
char *OutData;//定义输出指针
OutData= new char[4];
        //FileNamePath是文件路径变量,AnsiString格式
FileHandle=FileOpen(FileNamePath,fmOpenReadWrite);
FileRead(FileHandle,DateData,4);
BinToHex(DateData,OutData,4);
ShowMessage(OutData) ;
free(DateData);
DateData = NULL;
        free(OutData);
OutData = NULL;

------解决方案--------------------------------------------------------
OutData定义小了,要大到足够装下输出字符串的全部,比如
char OutData[200];
------解决方案--------------------------------------------------------
4个字节试试这个代码:
int FileHandle;     //定义文件句柄
long CurData; 
//FileNamePath是文件路径变量,AnsiString格式
FileHandle=FileOpen(FileNamePath, fmOpenReadWrite);
FileRead(FileHandle, &CurData, sizeof(CurData));
BinToHex(DateData,CurData,4);
ShowMessage(IntToHex(CurData, 8)) ;
FileClose(FileHandle);

------解决方案--------------------------------------------------------
4个字节试试这个代码:
int FileHandle;     //定义文件句柄
long CurData; 
//FileNamePath是文件路径变量,AnsiString格式

FileHandle=FileOpen(FileNamePath, fmOpenReadWrite);

FileRead(FileHandle, &CurData, sizeof(CurData));

ShowMessage(IntToHex(CurData, 8)) ;

FileClose(FileHandle);
  相关解决方案