在我的系统中,我需要添加2个Hex值。那么,我如何在C#中添加十六进制值?我还想知道Hexa值的最大长度以及哪个Instance保存这些值。
答案 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 = 0xff
或i = 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