从ULong转换为整数

问题描述:

我试图将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,即使将其四舍五入。 –

如果您确定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