我有一個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