我有一个int声明并在c中赋值。在内存方面,它看起来像下面返回int的第二个字节的地址或值
0x78 0×01 0×00 0×00地址0x20002AD4
我需要从INT的第一和第二个字节提取值。我已成功用下面的代码(参见包[2])
int dataSize = (lightCount * 3) + 1;
unsigned char packet[totalSize];
packet[0] = 0x7E;
packet[1] = 0x06;
packet[2] = (unsigned char)*(&dataSize); //dataSize LSB - THIS WORKS
packet[3] = (unsigned char)*(&dataSize + 1); //dataSize MSB - THIS DOES NOT
然而,当我尝试使用指针运算在int作为第二个字节返回的值(参见包[3提取的第一字节]),而是返回第4个字节。我相信这是由于int的大小为4字节,所以地址上的+1会沿着4个字节移动。
任何人都可以建议我怎么能在第二个字节返回值,即在上面的例子中我想回到0×01
小心Endianness。 – Sadique
您必须将指针转换为char,而不是指向int的指针。试试'((unsigned char *)&dataSize)[0]'(分别为1)。 – 2013-10-20 17:00:05
@Acme这不是问题的根源。 – 2013-10-20 17:01:56