|
楼主 |
发表于 2013-12-2 15:24:46
|
显示全部楼层
懂了 我这就是BCD码计算 刚开始我的思路是对的,就是写的时候错了,看了 liujian6f 的程序明白了,现在写完后的程序看看对了吧
/*******************************************************************************
功能:将已知长度的十六进制数组,按照bcd码,执行加法(0)或减法(1)运算
形参:
hex_array1 被减(加)数,计算的结果存入到hex_array1中,并修改实参,
hex_array2 减(加)数;
array_lengh 数组长度,两数组长度必须一致;
sign_temp 运算符号,0表示加法,1表示减法;
输入和输出的大小端格式根据注释修改:修改注释部分,并修改i 或者i-1
现在为: 小端输入,小端输出
*********************************************************************************/
void BCD_Count(u8 *hex_array1,u8 *hex_array2,u8 array_length,u8 sign_temp)
{
u8 i;
u32 decimal_long1 = 0;
u32 decimal_long2 = 0;
// for( i = 0; i < array_length; i++ ) //大端模式
for( i = array_length; i > 0; i-- ) //小端模式
{
decimal_long1 *= 100;
decimal_long1 += hex_array1[i-1]&0x0F; //大端i,小端i-1
decimal_long1 += ( (hex_array1[i-1]>>4) &0x0F )*10; //大端i,小端i-1
}
// for( i = 0; i < array_length; i++ ) //大端模式
for( i = array_length; i > 0; i-- ) //小端模式
{
decimal_long2 *= 100;
decimal_long2 += hex_array2[i-1]&0x0F; //大端i,小端i-1
decimal_long2 += ( (hex_array2[i-1]>>4) &0x0F )*10; //大端i,小端i-1
}
if( sign_temp == 0 )
{
decimal_long1 += decimal_long2;
}
else
{
decimal_long1 -= decimal_long2;
}
for( i = 0; i < array_length; i++ ) //小端模式
// for( i = array_length; i > 0; i-- ) //大端模式
{
*(hex_array1+i) = decimal_long1%10; //大端i-1,小端i
*(hex_array1+i) += ((decimal_long1%100)/10)<<4; //大端i-1,小端i
decimal_long1 /= 100;
}
} |
|