现场高分求助:将反向BCD码转换为字符串的C程序

qdwfji 2006-10-29 09:56:18
急啊, 十万火急啊!
偶现在需要比对BCD码的大小,但反向BCD码显然不能直接比较,如
起始BCD:214365, 终止BCD:214387。比较某BCD码是否处于二者之间,如214375,或214395。

现在急需先将BCD码转换为字符串,123456,123478,123457,123459后,再进行比较
...全文
437 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxh9314 2006-10-29
  • 打赏
  • 举报
回复
不明白楼主的意思
飞哥 2006-10-29
  • 打赏
  • 举报
回复
一头雾水~
jixingzhong 2006-10-29
  • 打赏
  • 举报
回复
我不明白为什么 要这样转换数据后比较 ~~

楼主能解释一下 什么是 反向BCD码 么?
BCD码是可以理解,
这个反向BCD码 是什么概念?

它们比较是根据什么规则呢?
Jokar 2006-10-29
  • 打赏
  • 举报
回复
你的BCD码存储为什么数据型态的
yingge 2006-10-29
  • 打赏
  • 举报
回复
晕,自己+一句不就可以了么?

char *inv_BCD_to_str(char *dst,void *BCDcode,size_t size){
char *ret=dst;
int i;
for(i=0;i<size;i++){
*dst++=((int)(*(char *)BCDcode)&0xf)+'0';
if(((int)(*(char *)BCDcode)&0xf0)==0xf0)
continue;
*dst++=((int)(*(char *)BCDcode)>>4)+'0';
(char *)BCDcode++;
}
*dst='\0';
return ret;
}
qdwfji 2006-10-29
  • 打赏
  • 举报
回复
多谢楼上兄弟
不过可能是我没有讲所有反向BCD码的描述说清楚——
反向BCD码如果是奇数位,则补F填充最后高半字节,如
字符串12345,其反向BCD码就要表示成2143F5
0010 0001 0100 0011 1111 0101
-- -- -- -- -- --
2 1 4 3 F 5
yingge 2006-10-29
  • 打赏
  • 举报
回复
#include <stdio.h>

char *inv_BCD_to_str(char *dst,void *BCDcode,size_t size){
char *ret=dst;
int i;
for(i=0;i<size;i++){
*dst++=((int)(*(char *)BCDcode)&0xf)+'0';
*dst++=((int)(*(char *)BCDcode)>>4)+'0';
(char *)BCDcode++;
}
*dst='\0';
return ret;
}

int main(){
char s[]={0x21,0x43,0x65,};
char *t=(char *)malloc(sizeof(s)*2+1);
printf("%s\n",inv_BCD_to_str(t,s,sizeof(s)));
free(t);
return 0;
}

qdwfji 2006-10-29
  • 打赏
  • 举报
回复
不好意思,是我没有解释清楚。答复如下:
1. 反向BCD码就是每byte的高4位、低4位反序,比如字符串格式123456存储成反向BCD码就是
0010 0001 0100 0011 0110 0101
-- -- -- -- -- --
2 1 4 3 6 5

2. 之所以要先将反向BCD码转换为字符串,是反向BCD码自身无法比较。比如
反向BCD码214387(就是字符串123478)要比反向BCD码214375(就是字符串123457)和214395(就是字符串123459)都大,但直接比对BCD码显然无法完成

有说的不清楚的大家见谅,我继续解释
lsd1025 2006-10-29
  • 打赏
  • 举报
回复
不明白

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧