社区
新手乐园
帖子详情
关于BCD码的若干问题
hxhx
2005-07-27 05:34:45
最近遇到了BCD码转换上的若干问题,
请问哪位大侠是否有 ASCii码与BCD码之间转换的源码,可否发一份。。
邮箱:FanHJ@clshops.com
先谢了。。。
...全文
300
23
打赏
收藏
关于BCD码的若干问题
最近遇到了BCD码转换上的若干问题, 请问哪位大侠是否有 ASCii码与BCD码之间转换的源码,可否发一份。。 邮箱:FanHJ@clshops.com 先谢了。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
antijpn
2005-07-28
打赏
举报
回复
直接求代码,转新手乐园
hxhx
2005-07-28
打赏
举报
回复
有否调试过,等我一调试成功,,马上接分。。
说话算话,,这里100 外加100
windcandle
2005-07-28
打赏
举报
回复
/*------------------------------------------------------------------------*/
/* Function Name: bta */
/* Description: 把整型数转化为'0'-->'F'的字符 */
/* Input: 整数 */
/* Output: 字符 */
/* Return: 转化后的字符 */
/*------------------------------------------------------------------------*/
static char
bta( int _asc )
{
if (_asc > 9) return((_asc-10) + 'A') ;
else return(_asc+'0') ;
}
/*------------------------------------------------------------------------*/
/* Function Name: bcdTOasc */
/* Description: 把BCD码转化成ASC码 */
/* Input: BCD码字符串 */
/* Output: ASC码字符串 */
/* Return: 转化后的ASC码字符 */
/*------------------------------------------------------------------------*/
char *
bcdTOasc( unsigned char *_bcd )
{
static char asc[17] ;
int i ;
for( i = 0; i < 8; i++ ) {
asc[i*2] = bta((_bcd[i] >> 4) & 0x0f) ;
asc[i*2+1] = bta(_bcd[i] & 0x0f) ;
}
asc[16] = 0 ;
return asc ;
}
/*------------------------------------------------------------------------*/
/* Function Name: atb */
/* Description: 把'0'-->'9','a'-->'f','A'-->'F'的字符转化为整型数 */
/* Input: 字符 */
/* Output: 整数 */
/* Return: 转化后的整型数 */
/*------------------------------------------------------------------------*/
static int
atb( char _asc )
{
if (_asc >= 'A' && _asc <= 'F') return(_asc - 'A'+ 10) ;
else if (_asc >= 'a' && _asc <= 'f') return(_asc - 'a'+ 10) ;
else return _asc - '0' ;
}
/*------------------------------------------------------------------------*/
/* Function Name: ascTObcd */
/* Description: 把ASC码转化成BCD码 */
/* Input: ASC码字符串 */
/* Output: BCD码字符串 */
/* Return: 转化后的BCD码字符 */
/*------------------------------------------------------------------------*/
unsigned char *
ascTObcd( char *_asc )
{
static unsigned char bcd[9] ;
int i ;
for( i = 0; i < 8; i++ )
bcd[i] = (atb(_asc[i*2]))*0x10 + atb(_asc[i*2+1]) ;
bcd[8] = 0 ;
return bcd ;
}
hxhx
2005-07-28
打赏
举报
回复
TO afx_swallow(足球和啤酒)
可否帮忙写一个。我将再补100分
hxhx
2005-07-28
打赏
举报
回复
完整结构呀,不然怎么看哦。谢了。
jixingzhong
2005-07-28
打赏
举报
回复
不过只是针对数字的
bcd 《bcd.h 》中
数学子程序 把一个数转换为相对应的BCD码
afx_swallow
2005-07-28
打赏
举报
回复
编一个也不费时
hxhx
2005-07-28
打赏
举报
回复
说来听听,,不过目的不是要输出,而且存储。
jixingzhong
2005-07-28
打赏
举报
回复
有个函数可以输出BCD玛...
hxhx
2005-07-28
打赏
举报
回复
TO windking21(暗淡)
可否对此段代码作个说明。。
hxhx
2005-07-28
打赏
举报
回复
嗯。。这个我有了,而且是在LIUNIX平台下的,我现在是在UNIX下,只要做些许定义变化。。
但是我还是不太明白,如果是多字节的话需要做何更改呢。。。
PMsg
2005-07-28
打赏
举报
回复
uint BCDtoASC(uchar bcd_data)
{
uint hex_data;
uchar x;
// x=bcd_data&0x0f;
x=bcd_data%0x10;
hex_data=((bcd_data/0x10+0x30)<<8)+(x+0x30);
return(hex_data);
}
uint ASCtoBCD(uchar hex_data)
{
uchar bcd_data;
bcd_data=(hex_data-0x30)&0x0f;
return (bcd_data);
}
void main()
{
uchar c;
uint a;
// c=0x99;
a=BCDtoASC(0x99);
c=ASCtoBCD(0x39);
}
别人写的一个字节的
hxhx
2005-07-28
打赏
举报
回复
算法很简单,但是如果C语言不熟悉的话那么也是个大问题,所以还是希望哪位大侠能给份源程序。
邮箱:FanHJ@clshops.com
sinkerwu
2005-07-28
打赏
举报
回复
while ( *phexchar !='\0' )
{
tempnum1 =hexchar[index]-'0';
tempnum2 =hexchar[index+1]-'0';
bcddata =(tempnum1<<4) | tempnum2;
pbuff[i]=bcddata;
phexchar++;
phexchar++;
i++;
index=index+2;
}
return(i) ;
windcandle
2005-07-28
打赏
举报
回复
上面的代码有个未知函数,需稍作改动。如下:
int
bcd2asc(char * old_str, int old_len, char * new_str)
{
int i;
char c, c1, c2;
char *p;
char a_hnum[]="0123456789ABCDEF";
p = new_str;
for ( i = 0; i < old_len; i ++ ) {
c = old_str[i];
c1 = (c >> 4) & 0x0F;
c2 = (c & 0x0F );
*p = a_hnum[c1];
p ++;
*p = a_hnum[c2];
p ++;
}
return old_len * 2 ;
}
int
asc2bcd(char * old_str, int old_len, char * new_str)
{
int len;
int i;
char c1;
char c2;
char c;
char *p;
char str[256];
char a_hnum[]="0123456789ABCDEF";
p = new_str;
memset ( str, 0, sizeof ( str ) );
len = old_len;
if ( old_len % 2 != 0){
strcpy ( str, "0" );
len ++;
}
memcpy ( str + strlen ( str ), old_str, old_len );
for ( i = 0; i < len; i ++ ) {
if ( str[i] >= '0' && str[i] <= '9' )
str[i] -= '0';
else if ( str[i] >= 'A' && str[i] <= 'F' ) {
str[i] -= 'A' ;
str[i] += 10;
} else if ( str[i] >= 'a' && str[i] <= 'f' ) {
str[i] -= 'a' ;
str[i] += 10;
}
else{
return -1;
}
}
for ( i = 0; i < len; i ++,i++ ) {
c1 = str[i];
c2 = str[i+1];
c = (c1 << 4) | (c2 & 0x0F );
*p = c;
p ++;
}
return len/2 ;
}
windcandle
2005-07-28
打赏
举报
回复
下面这个是肯定可以的。
int
bcd2asc(char * old_str, int old_len, char * new_str)
{
int i;
char c, c1, c2;
char *p;
char a_hnum[]="0123456789ABCDEF";
p = new_str;
for ( i = 0; i < old_len; i ++ ) {
c = old_str[i];
c1 = (c >> 4) & 0x0F;
c2 = (c & 0x0F );
*p = a_hnum[c1];
p ++;
*p = a_hnum[c2];
p ++;
}
return old_len * 2 ;
}
int
asc2bcd(char * old_str, int old_len, char * new_str)
{
int len;
int i;
char c1;
char c2;
char c;
char *p;
char str[256];
char a_hnum[]="0123456789ABCDEF";
p = new_str;
memset ( str, 0, sizeof ( str ) );
bcl_str_toupper ( old_str );
len = old_len;
if ( old_len % 2 != 0){
strcpy ( str, "0" );
len ++;
}
memcpy ( str + strlen ( str ), old_str, old_len );
for ( i = 0; i < len; i ++ ) {
if ( str[i] >= '0' && str[i] <= '9' )
str[i] -= '0';
else if ( str[i] >= 'A' && str[i] <= 'F' ) {
str[i] -= 'A' ;
str[i] += 10;
}
else{
return -1;
}
}
for ( i = 0; i < len; i ++,i++ ) {
c1 = str[i];
c2 = str[i+1];
c = (c1 << 4) | (c2 & 0x0F );
*p = c;
p ++;
}
return len/2 ;
}
hxhx
2005-07-28
打赏
举报
回复
呵呵。。谢谢。。。
windcandle
2005-07-28
打赏
举报
回复
嗯,好像是。我再给你找一个。
hxhx
2005-07-28
打赏
举报
回复
TO windcandle()
好像这段代码有点问题呀,是不是只能转ABCD这样的字符啊。。数字字符就不能转了吗??
sinopsw
2005-07-27
打赏
举报
回复
如果是8421BCD码的话转换很简单的啊,为什么要到这里来求程序呢?
加载更多回复(3)
2421码到8421码转换电路的设计
本课程设计采用
若干
逻辑门设计2421码到8421码的转换电路,用4个二极管显示输出状态,同时采用74LS48译码电路。
15春西南交《计算机原理》在线作业一-答案.doc
汉字字形码都是将汉字分解成
若干
"点"组成的点阵 正确答案:C 7. bit的意义是 A. 字 B. 字节 C. 字长 D. 二进制位 正确答案:D 8. 通常所说的主机是指 A. CPU B. CPU和内存 C. CPU、内存和外存 D. CPU、内存和硬盘 ...
Windows启动入门
大家日常都在使用Windows系统,不过你熟悉Windows的启动过程吗?想了解Windows系统的启动配置方法吗?Windows启动系列课程的入门课程将围绕大家常用的Windows 7以及Windows 10系统,讲解这些内容,包括: Windows...
课程设计简易计算器设计
要通过数码管显示出当前数值,还必须将
BCD码
进一步转换为七段码,转换的最终结果数据存放于显示缓冲区30H-33H单元中,其中30H单元存放数值的个位七段码,31H单元存放数值的十位七段码,32H单元存放数值的百位七段码...
计算机组成原理作业.docx
一位十进制数,用
BCD码
表示需___ 4 ___位二进制数表示。 8.给定一个8K*4bit的芯片,如果组成32Kx8bit的存储体,需要该芯片 8 个。 9.-85的补码表示为 。 10. ASCII码67H采用的是偶校验,那么校验位为 1 。 三....
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章