生成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个位置是可以的