我在使用VB.Net尝试将 a 转换Long
为 a时遇到问题,ULong.
我尝试了许多组合并不断出现溢出错误。我的有符号值为 -2147483648,我知道Ulong
一旦转换它就会有 2151196588。
但是我想以编程方式执行此操作,因为我正在解析可以是负数和正数的值,但是当数字为负数时,它们需要具有正确的ulong
值。注意:绝对值不起作用,它需要ulong
为真值。谢谢你。
我在使用VB.Net尝试将 a 转换Long
为 a时遇到问题,ULong.
我尝试了许多组合并不断出现溢出错误。我的有符号值为 -2147483648,我知道Ulong
一旦转换它就会有 2151196588。
但是我想以编程方式执行此操作,因为我正在解析可以是负数和正数的值,但是当数字为负数时,它们需要具有正确的ulong
值。注意:绝对值不起作用,它需要ulong
为真值。谢谢你。
您可以使用 BitConverter 类:
Dim a As Int64 = -2147483648
Dim b = BitConverter.ToUInt64(BitConverter.GetBytes(a), 0)
Console.WriteLine(b.ToString) ' outputs: 18446744071562067968
您确定您的预期值 2151196588 是正确的吗?
如果你的意思是reinterpret_cast<ulong>(long)
,然后使用相同的技术:
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit)> _
Public Structure LongULongUnion
<Runtime.InteropServices.FieldOffset(0)> Public l As Long
<Runtime.InteropServices.FieldOffset(0)> Public ul As ULong
End Structure
Sub Main()
Dim u As LongULongUnion
u.l = -2147483648L
Console.WriteLine(u.ul)
Console.ReadLine()
End Sub
但这会18446744071562067968
在转换时给出。
这是将任何Long 转换为 ULong 的最简单方法:
Dim x As Long = -2147483648
Dim y As ULong = Not (CType((Not x), ULong)) ' = 18446744071562067968
我是一名 C# 程序员,所以如果我将它错误地转换为 VB.NET,请纠正我。我的 C# 代码是:
long x = -2147483648;
ulong y = ~((ulong)~x); // = 18446744071562067968
基本上你取负值的补码,它总是一个正值。然后,您可以安全地将其转换为 ULong。再次取补码,您就可以将相同的位模式转换为 ULong。
确保在将值转换为 ulong 之前将其转换为正值,负值不在 ulong 的值范围内。
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615