如何进行int到char数组转换?

时间:2015-07-27 17:02:20

标签: c++ arrays char int

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。但它是如何运作的?

2 个答案:

答案 0 :(得分:0)

这种方法的工作方式是x 指向保存a数据的相同位置。当您写入x[0]或从a读取时,您正在访问<service android:name=".MessageService"></service> 中保存的值的第一个字节。 这不是在char数组和int之间进行转换,这是“通过char指针访问int”。

答案 1 :(得分:0)

首先,请注意其确切如何工作并不是由C或C ++标准决定的,并且你真的不应该依赖任何特定的行为,除非你真的知道你正在做什么和其影响。 (因为你不得不问,即使看完这个答案,你也不会属于那个类别!)

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

little endian 格式中,您可以按数量级访问数字;例如x[0]有一个位置,x[1]有256位,x[2]有256 ^ 2位,依此类推。也就是说,您可以从右到左访问数字。

big endian 格式中,数字的顺序相反。

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

构成int的基数为256位的数字也可能有所不同。 4位是常见的,但是2和8位发生了,甚至还有一些奇特的环境int根本不适合这张图片。

在您的特定计算机和编程环境中,可能发生的事情是int至少为4位并以小端形式存储;所以分配500表示数字是

0, 0, 1, 244

(因为500 = 244 * 1 + 1 * 256;记得如何计算基数的变化!)然后分配将数字更改为

0, 0, 2, 2

代表2 * 1 + 2 * 256 = 514

(另请注意,如果在您的编程环境中签署了char,您可能已将500的最右边数字视为-12而不是244:查找二进制补码表示法