将0x0000000000000001从字符串转换为长整型

本文关键字:长整型 转换 字符串 0x0000000000000001 | 更新日期: 2023-09-27 18:35:20

我有一个csv文件,它以这种格式存储长值:

0x0000000000000001
0x0000000000000002
0x0000000000000020
0x0000000000040000

我想将值保存在长变量中。我可以直接保存数据,例如:

long t = 0x0000000000040000;

这不会引发异常。

但是,我似乎无法将这种格式从字符串(因为我从 csv 文件中读取它)转换为 long。

我试过了

Convert.ToInt64("0x0000000000040000");

正如本问题所建议的

我也试过

long.Parse("0x0000000000040000", NumberStyles.HexNumber);

但这也是一个例外

当我摆脱前面的 0x 时,我可以解析它。但是然后保存的数字没有零(例如0x0000000000000001变成 1),这不是我想要的。

博士:

有谁知道如何解析

string s = "0x0000000000000001"; 

long l = 0x0000000000000001;

将0x0000000000000001从字符串转换为长整型

像这样:

   String source = "0x0000000000040000";
   long result = Convert.ToInt64("0" + source.TrimStart('0', 'x'), 16);

甚至

   long result = Convert.ToInt64(source, 16); 

要转换回string

   String back = String.Format("0x{0:x16}", result);

一种替代方法是,您可以使用Substring方法简单地省略转换的前两个字符:

string s = "0x0000000000040000";
long l = Convert.ToInt64(s.Substring(2), 16);

此代码将十六进制转换为 int 并检查无效输入,并在处理 0x00 时解析 0x

if (int.TryParse(stringname.TrimStart('0').TrimStart('x'), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int result))
{
    //use the value of "result"
}
else
{
    //check the input
}

您需要添加

using System.Globalization;