我有十六进制字符串,如1480D604。我需要将顺序从低变为高0x04D68014,然后我需要将其转换为十进制值。我能想到的一种方法是首先改变他们的订单。
步骤1:14-80-D6-04 - > 04-D6-80-14
如何以十六进制值从低到高顺序更改此顺序。
第2步
将第一步的输出转换为十进制值,如下所示
int decValue = int.Parse(hexValue,System.Globalization.NumberStyles.HexNumber);
0x04D68014 = 81166356
有没有简单的方法可以一步到位。
答案 0 :(得分:2)
在单一步骤中完成此操作的唯一方法"是定义方法,使用BitConverter
:
public static int ReverseByteOrder(int value)
{
byte[] bytes = BitConverter.GetBytes(value);
Array.Reverse(bytes);
return BitConverter.ToInt32(bytes, 0);
}
用法:
int value = 0x1480D604; //or parse from string
int decValue = ReverseByteOrder(value);
//decValue = 0x04D68014
严格来说,您应该查看BitConverter.IsLittleEndian
,因为订单可能已经按照正确的顺序排列,具体取决于它运行的系统。
这是不太可能的,所以我不打算对这种情况进行编码,但如果在BitConverter.IsLittleEndian
不在的系统上运行,我至少会导致程序崩溃 true
。
答案 1 :(得分:0)
您可以通过反转字节数组来实现。因此,首先使用此方法将字符串转换为字节数组:
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
使用类似:
string hexString = "1480D604";
byte[] byteArray = StringToByteArray(hexString);
然后反转字节数组:
Array.Reverse(byteArray);
然后使用以下方法将其转换回十六进制字符串:
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}
使用like:
string reversedString = ByteArrayToString(byteArray);
最后将其转换为int
,如上所述:
int decValue = int.Parse(reversedString, System.Globalization.NumberStyles.HexNumber);
就是这样。希望它有所帮助。