C#将十六进制字符串转换为十进制。为什么是负值?

时间:2019-01-17 20:00:07

标签: c#

下面的某些值的十六进制-> DEC代码返回负值。

f.x十六进制:a4ddfc12应该是:2766011410,但由于某种原因C#返回:-1528955886

代码:https://rextester.com/SHSC23645

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string myHexStr = "a4ddfc12";
            Console.WriteLine(Int32.Parse(myHexStr, 
System.Globalization.NumberStyles.HexNumber).ToString());
        }
    }
}

如果使用此命令,它将是相同的:     Console.WriteLine(Int32.Parse(Convert.ToInt32(myHexStr,16).ToString();

预计将获得:2766011410

1 个答案:

答案 0 :(得分:1)

该数字太大,无法容纳32位整数,最大值为2147483647和overflows

请改用64位整数:

string myHexStr = "a4ddfc12";

Console.WriteLine(Int64.Parse(myHexStr, NumberStyles.HexNumber).ToString());  // 2766011410