|
由于本人对BCD压缩码研究不够透彻,前几天写的转换代码有误,在此向关注我博客的朋友们表示深深的歉意!BCD转10进制又发现了一些毛病,07年11月13日再次更新.
修改后的代码如下:
unsigned char *temp;
unsigned char* CHAR2BCD(int length, unsigned char* char_char) { int i, int_tmp, bcd_tmp; memset(temp, '\0', length); for(i = 0; i < length; i ++) { char char_tmp[3]; char_tmp[0] = char_char[0 + 2 * i]; char_tmp[1] = char_char[1 + 2 * i];
char_tmp[2] = '\0'; /*把char型数组char_tmp转换成10进制数字int_tmp。*/ sscanf(char_tmp, "%d", &int_tmp); bcd_tmp = (int_tmp / 10) * 6 +int_tmp ; //BCD码为十进制逢10进1加6。 temp[i] = ((bcd_tmp / 10) << 4) | (bcd_tmp % 10); } return temp; }
unsigned char* BCD2CHAR(int length, unsigned char* char_bcd) { int i, int_tmp, bcd_tmp; memset(temp, '\0', length * 2); for(i = 0; i < length; i ++) { char char_tmp[2]; bcd_tmp = ((char_bcd[i] >> 4) * 16) | (char_bcd[i] & 0x0F); int_tmp = (bcd_tmp / 16) * 10 + bcd_tmp % 16; sprintf(char_tmp, "%x", int_tmp); temp[0 + 2 * i] = char_tmp[0]; temp[1 + 2 * i] = char_tmp[1]; } return temp; }
|