2011-09-24 108 views
0

要生成UINT64在以下結果 「警告C4293: '< <':移位計數負或過大,不確定的行爲」在32位系統上的UInt64,需要從UInt32的字節或數組中產生,怎麼樣?

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提供了用於比較此類型實例的方法,將實例的值 轉換爲其字符串表示形式,並將數字的字符串表示形式轉換爲此類型的實例。

很沒用,不是嗎?

+2

同樣的答案,你的第一個片段錯了兩次。使用BitConverter :: ToUInt64()。 –

回答

2

在轉移數值之前,您需要將static_cast轉換爲UInt64。否則,你正在將32位值移動32位,這是未定義的行爲。將64位值移動32位可以。

相關問題