UInt64在32位系统上,需要从UInt32's字节数组生成,如何



生成UInt64 "warning C4293: '<<': shift count负值或太大,未定义行为"

UInt64 byteArrayToUInt64(int %stI, array<Byte>^ byteArray) {
    UInt64 retV = byteArrayToUInt32(stI, byteArray);
    retV |= byteArrayToUInt32(stI, byteArray) << 32;
    return retV;
}

UInt64 byteArrayToUInt64(int %stI, array<Byte>^ byteArray) {
    stI += 8;
    return byteArray[stI - 8] | byteArray[stI - 7]  << 0x08 |  byteArray[stI - 6]
     << 0x10 |  byteArray[stI - 5]  << 0x18 |  byteArray[stI - 4] << 0x20 |  byteArray[stI - 3]
     << 0x28 |  byteArray[stI - 2]  << 0x30 |  byteArray[stI - 1] << 0x38;
}

不幸的是,所有的MS都不得不说他们的UInt64结构是:

UInt64取值类型为无符号整数,取值范围为从0到18,446,744,073,709,551,615.

UInt64提供该类型实例的比较方法值转换为其字符串表示形式,并将

数字的字符串表示形式。

很没用,不是吗?

在移位值之前,需要将其static_cast变为UInt64。否则你将把一个32位的值移动32个位置,这是未定义的行为。将64位的值移动32个位置是可以的

最新更新