2015-08-09 82 views
0

我試圖將ULONG列表轉換爲整數數組。從ULong轉換爲整數

該問題與如何丟棄ULONG的MSB有關!我曾嘗試各種操作,和所有的人都養的「溢出異常」錯誤:

dim MyInteger as Integer = CInt(ULong_Number)  
dim MyInteger as Integer = Convert.ToInt32(ULong_Number) 
dim MyInteger as Integer = Convert.ToUInt32(ULong_Number) 
dim MyInteger as Integer = ULong_Number xor &HFFFFFFFF00000000 xor &HFFFFFFFF00000000 

我正嘗試避免皈依到一個臨時的字節數組,然後讀4個字節到整數(LIST如果巨大,接近200萬個數字)。

有沒有人有任何想法隱式將此ULONG轉換爲INTEGER?

謝謝!

+0

你能舉一個你期待的結果嗎? – Shar1er80

+0

我期望的是每個64位數的最後32位部分。甚至可以將其轉換爲UINT16或UINT32,即使將其四捨五入。 –

回答

1

如果您確定ULong_Number的值不超過整數的最大值(2^31 - 1或& H7FFFFFFF),或者您想要忽略任何更高位(這將是一個奇數要做的事情,但你試圖適應一個8字節的數字到4個字節),你可以使用這個。

Dim MyInteger As Integer = CInt(ULong_Number And CULng(&H000000007FFFFFFF)) 
+0

問題是所有值都大於INTEGER或UINT16。我想丟棄MSB並獲取每個ULONG的最後32位。甚至通過內部轉換函數來調整數字(舍入)。 –

+0

@DavidBS你的意思是一些'長'的數字在&H7FFFFFFF和&FFFFFFFF之間,你想把它們當作負'整數'? – Blackwood

+0

布萊克伍德響應符合您的要求,即丟棄MSB。但是,我確認這是一個奇怪的決定,除非ulong存儲一個bool(或bool數組)列表。 – Graffito