我要读取一个dat文件
ue打开文件内的开头内容是
00 00 00 00 00 00 00 00 00 00 00 00 00 58 F5 01;
vb中读取语句是Seek #10, 14
              Get #10, , lo
读取出来的数是01 F5 58
那么我要用vc实现读取第十四位后这三个数的倒序读取方式
请教大侠如何实现

解决方案 »

  1.   

    FILE *fp;
    unsigned char a[ 0x100 ];
    fp = fopen( "a.dat", "rb" );
    if( fp )
    {
    fseek( fp, 13, SEEK_SET );
    fread( a, 1, 3, fp );
    fclose( fp );
    }a的前3字节是 58 f5 01
      

  2.   

    FILE *fp;
    unsigned char a[ 0x100 ];
    unsigned char b;
    fp = fopen( "a.dat", "rb" );
    if( fp )
    {
    fseek( fp, 13, SEEK_SET );
    fread( a, 1, 3, fp );
    // 倒序
    b = a[ 0 ];
    a[ 0 ] = a[ 2 ];
    a[ 2 ] = b;
    fclose( fp );
    }
      

  3.   


    int HexToInt(unsigned char cbHex[])
    {
     int i; 
     int n = 0; 
     for(i=0; cbHex[i]!=''\0''; i++) 
     { 
      //处理ASCII在0~9之间的数据
      if ( ( cbHex[i] >= ''0'' ) && ( cbHex[i] <= ''9'' ) )   
      {
       n = n*16 + cbHex[i] - ''0''; 
      }
      
      //处理ASCII在a~f之间的数据
      if ( ( cbHex[i] >= ''a'' ) && ( cbHex[i] <= ''f'' ) )  
      {
       n = n*16 + cbHex[i] - ''a'' + 10; 
      }        //处理ASCII在A~F之间的数据
      if ( ( cbHex[i] >= ''A'' ) && ( cbHex[i] <= ''F'' ) )  
      {
       n = n*16 + cbHex[i] - ''A'' + 10; 
      } 
     } 
     return n;
    }
      

  4.   

    您好  我读出来的数组是 a[0]= 01  a[1]= F5  a[2]=58
    用这个函数可行么
      

  5.   

    呵呵不好意思哈,是因为看基本差不多,所以就随手复制别人的了。
    函数里面的双引号应该是单引号的,因为都是字符,而非字符串。其他的可以尝试着改下哦,另外我自己写了个不知道行不://所谓的十进制在计算机里应该就是BCD码吧。Data表示你的16进制数,假设4字节;
    //Len表示有效数据长度,比如你的数据长度就是5,Data = 0x1f558;Value表示返回数据。
    void Hex2Bcd(const long Data, const int Len, unsigned char* Value)
    {
    unsigned long tmp = Data;
    for (int i = 0; i < Len; i++)
    {
    Value[i] = tmp % 10;
    tmp /= 10;
    Value[i] += (tmp % 10)<<4;
    tmp /= 10;
    }
    }
      

  6.   

    11楼这太麻烦了,很多都有现成函数:
    我写这个给你看看:int HexToInt(unsigned char cbHex)
    {
    char szData[4] = {0};
    int nRet = -1;
    sprintf(szData, "%d", cbHex);
    nRet = ::atoi(szData);
    return nRet;
    }用法比如:
    unsigned char a = '0xA1'
    int n = HexToInt(a);
      

  7.   

    补充一下:
    以上我写的函数必须引用头文件:
    <stdio.h><stdlib.h>用法是这样的:unsigned char a = 0xA1;
    int n = HexToInt(a);//得到n=161;
      

  8.   

    呵呵大虾的确实可行,学习了
    另外更正下,我那个函数的Len是指你待转换为INT后的有效数据位数,而不是数据长度。
      

  9.   

    谢谢诸位   我已经找到解决办法了  还是谢谢大家的帮忙
    fread(&x, sizeof(int), 1,fp);  读取数的话  直接就是低位在前 高位在后