要生成 UInt64,以下结果会导致“警告 C4293:'<<':移位计数为负数或太大,未定义的行为”
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 提供了方法来比较这种类型的实例,将实例的值转换为其字符串表示形式,并将数字的字符串表示形式转换为这种类型的实例。
很没用不是吗?