int到char数组的转换是如何发生的

How does int to char array conversion occurs?

本文关键字:何发生 转换 int char 数组      更新时间:2023-10-16
void main()
{
     int a;
     char *x;
     x = (char*)&a;
     a = 500;
     x[0] = 2;
     x[1] = 2;
     x[2] = 0;
     cout<<"final op : "<<a;
}
我知道答案是514。但是它是如何工作的呢?

首先,请注意这是如何工作的并不是由C或c++标准规定的,并且您真的不应该依赖于任何特定的行为,除非您真的知道您在做什么及其后果。(既然你必须问,你不属于这一类,即使在阅读了这个答案之后!)

最常见的两种方法是将整数以256为基数存储,每个字节存储一个数字(字节通常是8位,2^8 = 256)。因此,当您通过char*访问它时,每个位置代表一个数字。

小端序格式中,按数量级访问数字;例如,x[0]有个位,x[1]有256位,x[2]有256^2位,以此类推。也就是说,从右到左访问数字

大端序格式中,数字的顺序相反。

哪种格式通常由计算机硬件决定。

一个int有多少个256进制的数字也可以变化。4位数是常见的,但2和8也会发生,甚至在一些特殊的环境中,int根本不适合这种情况。

在特定的计算机和编程环境中,int可能是至少4位数字,并且以小端序形式存储;所以赋值500意味着数字是

0, 0, 1, 244

(because 500 = 244 * 1 + 1 * 256;还记得如何计算基数的变化吗?)然后赋值将数字更改为

0, 0, 2, 2

表示2 * 1 + 2 * 256 = 514

(另外,请注意,如果char在您的编程环境中是签名的,那么您可能会将500的最右边的数字读取为-12而不是244:查找two的补码符号)

工作方式是x 指向a保存数据的位置相同的位置。当你对x[0]写入或读取时,你访问的是a中保存的值的第一个字节。这不是在char数组和int之间进行转换,这是"通过char指针访问int"。