这里以16进制整数1378转为字符型数据的过程进行分析。
首先需知晓:
8个二进制位称为一个字节,整型数据是4个字节,字符型数据是1个字节,1个16进制是对应4个二进制的,a对应的ASCII码为97。
#include <iostream>
using namespace std;
int main()
{
int n1 = 1378; // 1378的十六进制形式是 0x562)
char n2 = n1; //将n1的整型数据赋值给字符型数据n2,完成整型到字符型结构的转变
printf("n2=%c, n2=%d",n2, n2); // %c表示将“ ”双引号和 , 逗号后面的n2以字符串形式代替,
// %d表示将“ ”双引号和 , 逗号后面的n2以整数形式代替
return 0;
}
// 打印结果为 n2=d, n2=98
// n2=d是因为第一个是%c,他是以字符形式进行转换的,即将整数通过ASCII码找到对应的字母d
// n2=98是因为第二个是%d,是以整数形式进行代替
现在来分析其结果为什么这个1378(10进制)变为16进制的整型数据变为字符型数据时会变为98:
原因在于:整型是4个字节,而字符型是1个字节,故整型数据赋值给字符型数据进行数据类型转换时,字符型数据是无法接收4个字节的,所以只能接收到整型数据的最右边的1个字节。
那么这里十六进制形式是0x562,而赋值给字符串时只接收到0x62
原因在于:首先0x只是进制类型的标识,不是字节哈,然后针对562这个1378的十六进制而言,因为1个字节对应8个二进制位,1个十六进制对应4个二进制,所以16进制的整型数据赋值给字符型数据时,他是2个十六进制(不知道如果用十六进制最右边的2个数来表示更具象些)对应字符型的1个字节!!!所以这里只需要把5剔除掉,仅留下62这两个十六进制的内容。那么字符型数据n2接收到的内容就是0x62,通过16进制的换算(6*16+2*16^0=98),即可。