十六进制从低变高,然后变为十进制

时间:2015-06-02 07:15:31

标签: c# hex decimal

我有十六进制字符串,如1480D604。我需要将顺序从低变为高0x04D68014,然后我需要将其转换为十进制值。我能想到的一种方法是首先改变他们的订单。

步骤1:14-80-D6-04 - > 04-D6-80-14

如何以十六进制值从低到高顺序更改此顺序。

第2步

将第一步的输出转换为十进制值,如下所示

int decValue = int.Parse(hexValue,System.Globalization.NumberStyles.HexNumber);

0x04D68014 = 81166356

有没有简单的方法可以一步到位。

2 个答案:

答案 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

IsLittleEndian

严格来说,您应该查看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);

就是这样。希望它有所帮助。