我试图找出将字节数组转换为uint64_t( unsigned long 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]; …Run Code Online (Sandbox Code Playgroud)