#1 楼
要从十进制转换为十六进制,请执行以下操作...string hexValue = decValue.ToString("X");
要从十六进制转换为十进制,请执行以下操作...
int decValue = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
或
int decValue = Convert.ToInt32(hexValue, 16);
#2 楼
十六进制->十进制:Convert.ToInt64(hexValue, 16);
十进制->十六进制
string.format("{0:x}", decValue);
评论
+1关于Convert.ToInt64(hexValue,16)的好处;是如果存在0x前缀,它将进行转换,而其他一些解决方案则不会。
– Craig
2012年1月4日12:53
@Craig嗨,所以我需要根据十六进制值大小进行转换,或者我可以将ToInt64应用于所有十六进制值,会有什么影响吗?
–user1219310
2014年8月27日14:07
#3 楼
看来您可以说Convert.ToInt64(value, 16)
从十六进制获取小数。
另一种方法是:
otherVar.ToString("X");
评论
我得到System.FormatException:指定的格式'x'无效
–c_Reg_c_Lark
18年2月12日在11:25
#4 楼
如果要在从十六进制到十进制数的转换中获得最佳性能,则可以将方法与预先填充的十六进制到十进制值的表一起使用。下面的代码说明了这个想法。我的性能测试表明,它可以比Convert.ToInt32(...)快20%-40%:
class TableConvert
{
static sbyte[] unhex_table =
{ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1
,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
,-1,10,11,12,13,14,15,-1,-1,-1,-1,-1,-1,-1,-1,-1
,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
};
public static int Convert(string hexNumber)
{
int decValue = unhex_table[(byte)hexNumber[0]];
for (int i = 1; i < hexNumber.Length; i++)
{
decValue *= 16;
decValue += unhex_table[(byte)hexNumber[i]];
}
return decValue;
}
}
评论
天才!想知道是否有可能使字节编译器在Convert.ToInt32内部自动使用此方法?
–杰夫·哈弗森(Jeff Halverson)
2012年4月29日在1:56
我看不出任何无法完成的原因。但是,维护阵列将消耗额外的内存。
–Vadym Stetsiak
2012年4月30日在6:24
#5 楼
来自Geekpedia:// Store integer 182
int decValue = 182;
// Convert integer 182 as a hex in a string variable
string hexValue = decValue.ToString("X");
// Convert the hex string back to the number
int decAgain = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
评论
我用这种方法在几分钟内制作了小型dotnet 4.0应用程序,仅需几行代码就可以很好地工作。
–RatherLogical
18年8月21日在18:00
#6 楼
String stringrep = myintvar.ToString("X");
int num = int.Parse("FF", System.Globalization.NumberStyles.HexNumber);
#7 楼
十六进制到十进制转换Convert.ToInt32(number, 16);
十进制到十六进制转换
int.Parse(number, System.Globalization.NumberStyles.HexNumber)
有关更多详细信息,请查看本文
/>
评论
这似乎只是这个答案的重复。
–庞
17年5月5日在1:38
#8 楼
static string chex(byte e) // Convert a byte to a string representing that byte in hexadecimal
{
string r = "";
string chars = "0123456789ABCDEF";
r += chars[e >> 4];
return r += chars[e &= 0x0F];
} // Easy enough...
static byte CRAZY_BYTE(string t, int i) // Take a byte, if zero return zero, else throw exception (i=0 means false, i>0 means true)
{
if (i == 0) return 0;
throw new Exception(t);
}
static byte hbyte(string e) // Take 2 characters: these are hex chars, convert it to a byte
{ // WARNING: This code will make small children cry. Rated R.
e = e.ToUpper(); //
string msg = "INVALID CHARS"; // The message that will be thrown if the hex str is invalid
byte[] t = new byte[] // Gets the 2 characters and puts them in seperate entries in a byte array.
{ // This will throw an exception if (e.Length != 2).
(byte)e[CRAZY_BYTE("INVALID LENGTH", e.Length ^ 0x02)],
(byte)e[0x01]
};
for (byte i = 0x00; i < 0x02; i++) // Convert those [ascii] characters to [hexadecimal] characters. Error out if either character is invalid.
{
t[i] -= (byte)((t[i] >= 0x30) ? 0x30 : CRAZY_BYTE(msg, 0x01)); // Check for 0-9
t[i] -= (byte)((!(t[i] < 0x0A)) ? (t[i] >= 0x11 ? 0x07 : CRAZY_BYTE(msg, 0x01)) : 0x00); // Check for A-F
}
return t[0x01] |= t[0x00] <<= 0x04; // The moment of truth.
}
#9 楼
这并不是真正最简单的方法,但是此源代码使您可以纠正任何类型的八进制数,即23.214、23和0.512等。希望对您有帮助。. public string octal_to_decimal(string m_value)
{
double i, j, x = 0;
Int64 main_value;
int k = 0;
bool pw = true, ch;
int position_pt = m_value.IndexOf(".");
if (position_pt == -1)
{
main_value = Convert.ToInt64(m_value);
ch = false;
}
else
{
main_value = Convert.ToInt64(m_value.Remove(position_pt, m_value.Length - position_pt));
ch = true;
}
while (k <= 1)
{
do
{
i = main_value % 10; // Return Remainder
i = i * Convert.ToDouble(Math.Pow(8, x)); // calculate power
if (pw)
x++;
else
x--;
o_to_d = o_to_d + i; // Saving Required calculated value in main variable
main_value = main_value / 10; // Dividing the main value
}
while (main_value >= 1);
if (ch)
{
k++;
main_value = Convert.ToInt64(Reversestring(m_value.Remove(0, position_pt + 1)));
}
else
k = 2;
pw = false;
x = -1;
}
return (Convert.ToString(o_to_d));
}
评论
欢迎Stackoverflow。你能解释一下你的代码吗(我只是一句话)。谢谢!
–丹尼尔B
2012年12月4日14:17
#10 楼
尝试在C#中使用BigNumber-表示任意大的有符号整数。程序
using System.Numerics;
...
var bigNumber = BigInteger.Parse("837593454735734579347547357233757342857087879423437472347757234945743");
Console.WriteLine(bigNumber.ToString("X"));
输出
4F30DC39A5B10A824134D5B18EEA3707AC854EE565414ED2E498DCFDE1A15DA5FEB6074AE248458435BD417F06F674EB29A2CFECF
可能的异常,
ArgumentNullException-值为null。
FormatException-值的格式不正确。
结论
可以转换字符串并将值存储在BigNumber中,而不受数字大小的限制,除非字符串为空且非字母
#11 楼
如果它是超出普通整数的容量的非常大的十六进制字符串:对于.NET 3.5,我们可以使用BouncyCastle的BigInteger类:
String hex = "68c7b05d0000000002f8";
// results in "494809724602834812404472"
String decimal = new Org.BouncyCastle.Math.BigInteger(hex, 16).ToString();
#12 楼
我的版本比较容易理解,因为我的C#知识不是很高。我正在使用以下算法:http://easyguyevo.hubpages.com/hub/Convert-Hex-to-Decimal(The示例2)
using System;
using System.Collections.Generic;
static class Tool
{
public static string DecToHex(int x)
{
string result = "";
while (x != 0)
{
if ((x % 16) < 10)
result = x % 16 + result;
else
{
string temp = "";
switch (x % 16)
{
case 10: temp = "A"; break;
case 11: temp = "B"; break;
case 12: temp = "C"; break;
case 13: temp = "D"; break;
case 14: temp = "E"; break;
case 15: temp = "F"; break;
}
result = temp + result;
}
x /= 16;
}
return result;
}
public static int HexToDec(string x)
{
int result = 0;
int count = x.Length - 1;
for (int i = 0; i < x.Length; i++)
{
int temp = 0;
switch (x[i])
{
case 'A': temp = 10; break;
case 'B': temp = 11; break;
case 'C': temp = 12; break;
case 'D': temp = 13; break;
case 'E': temp = 14; break;
case 'F': temp = 15; break;
default: temp = -48 + (int)x[i]; break; // -48 because of ASCII
}
result += temp * (int)(Math.Pow(16, count));
count--;
}
return result;
}
}
class Program
{
static void Main(string[] args)
{
Console.Write("Enter Decimal value: ");
int decNum = int.Parse(Console.ReadLine());
Console.WriteLine("Dec {0} is hex {1}", decNum, Tool.DecToHex(decNum));
Console.Write("\nEnter Hexadecimal value: ");
string hexNum = Console.ReadLine().ToUpper();
Console.WriteLine("Hex {0} is dec {1}", hexNum, Tool.HexToDec(hexNum));
Console.ReadKey();
}
}
#13 楼
将二进制转换为十六进制Convert.ToString(Convert.ToUInt32(binary1, 2), 16).ToUpper()
#14 楼
一种将字节数组转换为十六进制表示形式的扩展方法。这会在每个字节前加上前导零。 /// <summary>
/// Turns the byte array into its Hex representation.
/// </summary>
public static string ToHex(this byte[] y)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in y)
{
sb.Append(b.ToString("X").PadLeft(2, "0"[0]));
}
return sb.ToString();
}
#15 楼
这是我的功能:using System;
using System.Collections.Generic;
class HexadecimalToDecimal
{
static Dictionary<char, int> hexdecval = new Dictionary<char, int>{
{'0', 0},
{'1', 1},
{'2', 2},
{'3', 3},
{'4', 4},
{'5', 5},
{'6', 6},
{'7', 7},
{'8', 8},
{'9', 9},
{'a', 10},
{'b', 11},
{'c', 12},
{'d', 13},
{'e', 14},
{'f', 15},
};
static decimal HexToDec(string hex)
{
decimal result = 0;
hex = hex.ToLower();
for (int i = 0; i < hex.Length; i++)
{
char valAt = hex[hex.Length - 1 - i];
result += hexdecval[valAt] * (int)Math.Pow(16, i);
}
return result;
}
static void Main()
{
Console.WriteLine("Enter Hexadecimal value");
string hex = Console.ReadLine().Trim();
//string hex = "29A";
Console.WriteLine("Hex {0} is dec {1}", hex, HexToDec(hex));
Console.ReadKey();
}
}
评论
这可能是Convert扩展方法的一个很好的候选者,因此可以这样写:int hexa = Convert.ToHexadecimal(11); =)
–威尔·马库里尔(Will Marcouiller)
2014年8月22日在18:46
#16 楼
我的解决方案有点像回到基础,但是它无需使用任何内置函数即可在数字系统之间进行转换。 public static string DecToHex(long a)
{
int n = 1;
long b = a;
while (b > 15)
{
b /= 16;
n++;
}
string[] t = new string[n];
int i = 0, j = n - 1;
do
{
if (a % 16 == 10) t[i] = "A";
else if (a % 16 == 11) t[i] = "B";
else if (a % 16 == 12) t[i] = "C";
else if (a % 16 == 13) t[i] = "D";
else if (a % 16 == 14) t[i] = "E";
else if (a % 16 == 15) t[i] = "F";
else t[i] = (a % 16).ToString();
a /= 16;
i++;
}
while ((a * 16) > 15);
string[] r = new string[n];
for (i = 0; i < n; i++)
{
r[i] = t[j];
j--;
}
string res = string.Concat(r);
return res;
}
#17 楼
class HexToDecimal
{
static void Main()
{
while (true)
{
Console.Write("Enter digit number to convert: ");
int n = int.Parse(Console.ReadLine()); // set hexadecimal digit number
Console.Write("Enter hexadecimal number: ");
string str = Console.ReadLine();
str.Reverse();
char[] ch = str.ToCharArray();
int[] intarray = new int[n];
decimal decimalval = 0;
for (int i = ch.Length - 1; i >= 0; i--)
{
if (ch[i] == '0')
intarray[i] = 0;
if (ch[i] == '1')
intarray[i] = 1;
if (ch[i] == '2')
intarray[i] = 2;
if (ch[i] == '3')
intarray[i] = 3;
if (ch[i] == '4')
intarray[i] = 4;
if (ch[i] == '5')
intarray[i] = 5;
if (ch[i] == '6')
intarray[i] = 6;
if (ch[i] == '7')
intarray[i] = 7;
if (ch[i] == '8')
intarray[i] = 8;
if (ch[i] == '9')
intarray[i] = 9;
if (ch[i] == 'A')
intarray[i] = 10;
if (ch[i] == 'B')
intarray[i] = 11;
if (ch[i] == 'C')
intarray[i] = 12;
if (ch[i] == 'D')
intarray[i] = 13;
if (ch[i] == 'E')
intarray[i] = 14;
if (ch[i] == 'F')
intarray[i] = 15;
decimalval += intarray[i] * (decimal)Math.Pow(16, ch.Length - 1 - i);
}
Console.WriteLine(decimalval);
}
}
}
评论
我想了解这行decValue.ToString(“ X”)如何将其转换为十六进制。
– gizgok
2010-12-7 8:45
变量decValue的类型为Int32。 Int32具有ToString()重载,它可以接受许多格式字符串之一,这些格式字符串指示如何将值表示为字符串。 “ X”格式字符串表示十六进制,因此255.ToString(“ X”)将返回十六进制字符串“ FF”。有关更多信息,请参见msdn.microsoft.com/en-us/library/dwhawy9k.aspx
–安迪·麦克拉格(Andy McCluggage)
2010-12-7 9:07
好答案。我实际上是在使用int.TryParse而不是int.Parse来避免不得不使用烦人的try catch块。
– ROFLwTIME
2012年8月23日12:53
@VadymStetsiak Convert.ToInt32只是调用Int32.Parse(int.Parse)(脸掌)
–科尔·约翰逊(Cole Johnson)
2012年11月14日在2:07
@ColeJohnson int.Parse没有将基本形式指定为int的选项,就像一些有效的NumberStyles之一一样。对于基数16,两个都很好,但是作为一般解决方案,最好知道两者如何工作。
– Tim S.
13-10-21在20:44