//基于查表实现BCD与Ascii之间的转换
static unsigned char bcd2ascii[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
static unsigned char ascii2bcd1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static unsigned char ascii2bcd2[6] = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };
UINT32 ASC2BCD(unsigned char *bcd, const unsigned char *asc, UINT32 len)
{
unsigned char c = 0;
unsigned char index = 0;
unsigned char i = 0;
len >>= 1;
for (; i < len; i++) {
//first BCD
if (*asc >= 'A' && *asc <= 'F') {
index = *asc - 'A';
c = ascii2bcd2[index] << 4;
}
else if (*asc >= '0' && *asc <= '9') {
index = *asc - '0';
c = ascii2bcd1[index] << 4;
}
asc++;
//second BCD
if (*asc >= 'A' && *asc <= 'F') {
index = *asc - 'A';
c |= ascii2bcd2[index];
}
else if (*asc >= '0' && *asc <= '9') {
index = *asc - '0';
c |= ascii2bcd1[index];
}
asc++;
*bcd++ = c;
}
return 0;
}
UINT32 BCD2ASC(unsigned char *asc, const unsigned char *bcd, UINT32 len)
{
unsigned char c = 0;
unsigned char i;
for (i = 0; i < len; i++) {
//first BCD
c = *bcd >> 4;
*asc++ = bcd2ascii[c];
//second
c = *bcd & 0x0f;
*asc++ = bcd2ascii[c];
bcd++;
}
return 0;
}
ASCII与BCD互转
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- MYSQL日期 字符串 时间戳互转 平时比较常用的时间、字符串、时间戳之间的互相转换,虽然常用但是几乎每次使用时候...
- 当做自己学习的字典,以后经常补充和完善 变量和常量 创建一个变量 创建一个常量 数组 一个变量数组 创建一个常量数...