我要读取一个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实现读取第十四位后这三个数的倒序读取方式
请教大侠如何实现
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实现读取第十四位后这三个数的倒序读取方式
请教大侠如何实现
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
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 );
}
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;
}
用这个函数可行么
函数里面的双引号应该是单引号的,因为都是字符,而非字符串。其他的可以尝试着改下哦,另外我自己写了个不知道行不://所谓的十进制在计算机里应该就是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;
}
}
我写这个给你看看: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);
以上我写的函数必须引用头文件:
<stdio.h><stdlib.h>用法是这样的:unsigned char a = 0xA1;
int n = HexToInt(a);//得到n=161;
另外更正下,我那个函数的Len是指你待转换为INT后的有效数据位数,而不是数据长度。
fread(&x, sizeof(int), 1,fp); 读取数的话 直接就是低位在前 高位在后