I m试图在将星阵列转换成uint64_t
时标出一个灯泡(unsign long
)。
我知道你可以这样做,但这不是我的问题。 我希望以多种重复的方式这样做。 我想知道,为什么在有些情形下,重复做法没有按计划进行。
该法典的结果是正确的:
#include <stdio.h>
int main()
{
unsigned char byte[8];
unsigned long long x;
byte[0] = 0x15;
byte[1] = 0x15;
byte[2] = 0x17;
byte[3] = 0x18;
byte[4] = 0x19;
byte[5] = 0x20;
byte[6] = 0x21;
byte[7] = 0x12;
x = (byte[0]*0x100000000000000) +
(byte[1]*0x1000000000000) +
(byte[2]*0x10000000000) +
(byte[3]*0x100000000);
x = x +
(byte[4]<<24) +
(byte[5]<<16) +
(byte[6]<<8) +
byte[7];
printf("%llx
", x);
}
结果是15171819202112
,这是正确的。
但就本案而言,我用这些 by子代替:
byte[0] = 0x15;
byte[1] = 0x92; // changed
byte[2] = 0x53; // changed
byte[3] = 0x22; // changed
byte[4] = 0xec; // changed
byte[5] = 0x33; // changed
byte[6] = 0x99; // changed
byte[7] = 0x12;
......结果是错误的。
I get:
15925321ec339912.
But, it should be:
15925322ec339912.
Why? What is the bug?