[英]UInt64 on a 32 bit system, need to generate from UInt32's or array of bytes, how?
要生成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提供了比较此类型实例的方法,将实例的值转换为其字符串表示形式,并将数字的字符串表示形式转换为此类型的实例。
相当无用不是吗?
在移动值之前,您需要将其static_cast
到UInt64
。 否则,您将32位值移位32位,这是未定义的行为。 将64位值移动32位是可以的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.