在C#中添加十六进制值

时间:2010-12-16 05:30:04

标签: c#

在我的系统中,我需要添加2个Hex值。那么,我如何在C#中添加十六进制值?我还想知道Hexa值的最大长度以及哪个Instance保存这些值。

6 个答案:

答案 0 :(得分:14)

C#支持hexadecimal literals

int i = 0xff;

但是,它们具有与十进制文字相同的数值 - 您受所使用类型的限制。没有特殊的Hexa类型。

如果您有一个整数并希望显示十六进制基数,则可以使用x格式(example):

int i = 255;
Console.Write(i.ToString("x")); // ff
Console.Write(i); // 255

请注意,编写i = 0xffi = 255 完全相同 - 编译器会解析该值,并获得相同的编译代码。

最后,如果您有十六进制数字的字符串,您可以将它们转换为整数,求和,然后重新格式化它们(example):

string hexValue = "af";
int i = Convert.ToInt32(hexValue, 16); //175

答案 1 :(得分:3)

对于64个字符的数字,您需要使用BigInteger类型的.Net 4,普通类型太小:

BigInteger bi1 = BigInteger.Parse("123456789012345678901234567890123456789012345678901234567890abc5", NumberStyles.HexNumber);
BigInteger bi2 = BigInteger.Parse("123456789012345678901234567890123456789012345678901234567890abc1", NumberStyles.HexNumber);
BigInteger sum = BigInteger.Add(bi1, bi2);
Console.WriteLine("{0:x}", sum); //or sum.ToString("x")

(请记住添加对System.Numerics的引用)

答案 2 :(得分:2)

  int a = 0x2;
  int b = 0x5f;
  int value = a + b; //adding hex values

  string maxHex = int.MaxValue.ToString("x"); //maximum range of hex value as int

答案 3 :(得分:1)

十六进制值只是普通的旧整数(毕竟,十进制中的数字10和十六进制中的数字A是相同的,只是以不同的方式查看);如果您需要将一个转换为十六进制字符串,请使用:value.ToString("X"),其中value是一个整数类型(如int)。

答案 4 :(得分:0)

关于你的最后一个问题:你可以在整数类型(byte,short,int和long)中使用十六进制常量。在C#中,long是64位,因此最长的十六进制常量是0x1234567812345678(或任何其他16位十六进制数字)。

答案 5 :(得分:0)

您可以使用此代码汇总结果。您可以在ByteConverters class

上查看更多内容
    public static long HexLiteralToLong(string hex)
    {
        if (string.IsNullOrEmpty(hex)) throw new ArgumentException("hex");

        int i = hex.Length > 1 && hex[0] == '0' && (hex[1] == 'x' || hex[1] == 'X') ? 2 : 0;
        long value = 0;

        while (i < hex.Length)
        {
            int x = hex[i++];

            if
                (x >= '0' && x <= '9') x = x - '0';
            else if
                (x >= 'A' && x <= 'F') x = (x - 'A') + 10;
            else if
                (x >= 'a' && x <= 'f') x = (x - 'a') + 10;
            else
                throw new ArgumentOutOfRangeException("hex");

            value = 16 * value + x;
        }

        return value;
    }

用法:

var HexSum = HexLiteralToLong("FF") + HexLiteralToLong("FF");

结果:

510