我有以下字符串:“0x780000105d0e0030” 如果这不是字符串,我可以很容易地得到如下值:
ulong myValue = 0x780000105d0e0030;
给我的值为:8646911354832027696 但是,当我想按如下方式解析它时:
var myValue2= Convert.ToInt64("0x780000105d0e0030",16)
给我的价值:8070450566607667200
然后,myValue与myValue2不同。然而,myValue是正确的,这就是它应该如何工作。我做错了什么?
答案 0 :(得分:3)
myValue
为无符号Int64时,myValue2
符号为Int64。
您实际需要的是Convert.ToUInt64
功能。
答案 1 :(得分:3)
答案 2 :(得分:2)
您要转换的值在Int64的范围内,并转换为等效的Int64值,如以下代码所示:
ulong u = 0x780000105d0e0030;
Console.WriteLine("Convert.ToInt64(\"0x780000105d0e0030\", 16) => {0}", Convert.ToInt64("0x780000105d0e0030", 16));
Console.WriteLine("u => {0}", u);
Console.WriteLine("u.ToString(\"x\") => {0}", u.ToString("x"));
Console.WriteLine("Convert.ToInt64(u.ToString(\"x\"), 16) => {0}", Convert.ToInt64(u.ToString("x"), 16));
Console.WriteLine("u = (ulong)Convert.ToInt64(\"0x780000105d0e0030\", 16)");
u = (ulong)Convert.ToInt64("0x780000105d0e0030", 16);
Console.WriteLine("u => {0}", u);
导致以下输出:
Convert.ToInt64("0x780000105d0e0030", 16) => 8646911354832027696
u => 8646911354832027696
u.ToString("x") => 780000105d0e0030
Convert.ToInt64(u.ToString("x"), 16) => 8646911354832027696
u = (ulong)Convert.ToInt64("0x780000105d0e0030", 16)
u => 8646911354832027696
这留下了两种可能性:
我的钱将用于后一种解释。