繁体   English   中英

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

[英]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_castUInt64 否则,您将32位值移位32位,这是未定义的行为。 将64位值移动32位是可以的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM