簡體   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