内存中用组合BCD码表示的十进制数,把它转换成ASCII码的c语言程序

2025年03月19日 00:59
有5个网友回答
网友(1):

一个ASCII码最多需要四个BCD码存储,也就是两个字节。比如‘A',ASCII码值是65,用BCD表示是0000,0000,0110,0101,’1‘的ASCII码值是49,用BCD表示是0000,0000,0100,1001。现在的问题是这些BCD码是如何提供的?这里假定,用整数值表示BCD码,如'e'的ASCII码值(101)10,用整数表示的BCD是0000,0001,0000,0001,也就是257。

#include 
const int MAXLEN = 128;

int main() {
char asciis[MAXLEN];
short bcds[] = {101,277,104,130,72,73,66};// AsDR12*
int i,j,t,p,m,k = 0,n = sizeof(bcds)/sizeof(bcds[0]);
for(i = 0; i < n; ++i) {
t = bcds[i];
m = 0;
for(j = 0; j < 4; ++j) {
p = (t & 0XF000) >> 12;
m = 10 * m + p;
t <<= 4;
}
asciis[k++] = m;
}
asciis[k] = '\0';
printf("%s\n",asciis);
return 0;
}

网友(2):

1、内存中的组合BCD码,常以十六进制串形式存在,并且此形式的十六进制串从表面上看与十进制数表现形式一致,比如BCD码:0001 0000(2)=10(16)=10(10)(注意这里是BCD码,真正的16进制10并不等于10进制10),那么,只要把BCD码的16进制串转换成10进制数值,就得到相应的10进制数,就可以得到相应的ascii码。

2、c语言代码示例:

#include 

int main(int argc, char *argv[])
{
char n[]="101";//16进制BCD码
int ascm=0,i=0;
while(n[i])
{
ascm=ascm*10+(n[i]-'0');//10进制ascii码
i++;
}
printf("ascii:%d\nchar:%c\n",ascm,ascm);

}

网友(3):

bcd 码是怎么存的  是一个字节存两个BCD还是?

// 一个 val 保存2个BCD
#define BCD_TA_BIN (val) ((val)&15+((val)>>4)*10)

网友(4):

a[i] = a[i] + '0'

网友(5):


题目中的“组合 BCD 码、高地址。。。”,都不是 C 语言所能操作的。

这种题目,应该用汇编语言来编程。