ASCII码中0的值是48,相应是00110000,但00110000不是也表示48这个整数吗?计算机怎么判断是48还是0?
计算机在存储和解释数据时,会根据表示方式的不同来区分ASCII码和普通二进制数。
因此,计算机可以根据程序代码中所使用的变量或数据类型来判断数据是ASCII码还是普通二进制数,从而选择正确的解释方式。
计算机只存储二进制数据,ASCII码程序才能认识
C语言版本,由于能力有限,方法比较落后(努力提升中)
先上代码:
#include <stdio.h>
#define N 1000
int main()
{
char binStr[N][10]; //用于存放二进制字符串
char hexStr[N][4]; //用于存放十六进制字符串
int n;
while(scanf("%d", &n)!=EOF)
{
int i,j;
for(i = 0; i < n; i++)
{
scanf("%s", binStr[i]); //输入,小心别把换行符输进去了……
}
printf("ASCII: \n ");
for(i = 0; i < n; i++)
{
int p = 1, temp = 0;
for(j = 7; j >= 0; j--) //正着存进去,就倒着加和
{
temp = (binStr[i][j]-'0')*p + temp; //运算时换成对应的 整型数值
p = p*2;
}
printf("%c", temp);
}
printf("\n");
for(i = 0; i < n; i++)
{
int temp1 = 0, temp2 = 0;
int p = 1;
for(j = 3; j >= 0; j--) //正着存进去,就倒着加和
{
temp1 = (binStr[i][j]-'0')*p + temp1;
p = p*2;
}
p = 1;
if(temp1<10)
hexStr[i][0] = temp1 + '0';
else hexStr[i][0] = temp1 % 10 + 'A';
//当 temp1大于十需要转换为'A'~'F'
for(j = 7; j >= 4; j--)
{
temp2 = (binStr[i][j]-'0')*p + temp2;
p = p*2;
}
if(temp2<10)
hexStr[i][1] = temp2 + '0';
else hexStr[i][1] = temp2 % 10 + 'A';
}
printf("Hex: \n ");
for(i = 0; i < n; i++)
{
for(j = 0; j < 2; j++)
printf("%c", hexStr[i][j]);
printf(" ");
}
printf("\n\n");
}
return 0;
}
42
01100110 01101100 01100001 01100111 01111011 01100011 01100101 00110011 01100101 00110101 00110000 00110010 01100011 00101101 00110100 00111000 01100011 00111001 00101101 00110100 01100100 00110101 00110000 00101101 00111001 00111001 00111001 00110000 00101101 00110101 01100010 00111000 00110001 01100100 01100010 00110110 01100110 01100011 01100010 01100110 00110000 01111101
运行结果: