仅突出运算,数据长度可根据需要扩展
在运算环境不支持long long时编写
//========================================
//== 函 数 名:BCD2HEX
//== 功 能 :六个字节的压缩BCD码转换成十六进制
//== 说 明 :适用于linux以及单片机,VS环境待测试
//== 参数:bcd[6]:待转换数据;hexa[8]:十六进制
//=========================================
int BCD2HEXA( unsigned char bcd[6], unsigned char hexa[8])
{
unsigned long temp[3] = {0,0,0};
unsigned char result[9] ;
unsigned char tmp;
int i ;
//将bcd码转成十进制数存放在数组中
for ( i = 0 ; i < 6; i ++ ) {
temp[0] *= 100;
temp[1] *= 100;
temp[2] *= 100;
temp[0] += bcd[i];
tmp = temp[0] >> 24;
temp[0] &= 0xFFFFFF;
temp[1] += tmp;
tmp = temp[1] >> 24;
temp[1] &= 0xFFFFFF;
temp[2] += tmp;
}
//位移 相当于取余运算。例如: 27%16 == 11 —— 27 & 0xf
for( i = 0 ; i < 3 ; i ++ ) {
result[i] = temp[0]; temp[0] >>= 8;
result[i + 3 ] = temp[1];temp[1] >>= 8;
result[ i + 6] = temp[2]; temp[2] >>= 8;
}
//字节序倒置
for (i = 0; i < 4; i++) {
tmp = result[i];
result[i] = result[7-i];
result[7-i] = tmp;
}
memcpy(hexa,result,8);//结果是低位在前的顺序数组
return 0;
}