【问题标题】:Hex change low to high and then conever to decimal十六进制从低到高再转换为十进制
【发布时间】:2015-08-15 20:51:13
【问题描述】:

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

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

如何将此顺序从十六进制值的低顺序更改为高顺序。

第 2 步

像这样将第一步的输出转换为十进制值

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

0x04D68014=81166356

有没有什么简单的方法可以一步完成。

【问题讨论】:

  • 所以0x04D68014 是从低到高的顺序?
  • 是的,我们端收到的数据顺序相反
  • 仅供参考,“十进制”表示别的意思,你说的是整数

标签: c# hex decimal


【解决方案1】:

“一步”完成的唯一方法是定义一个方法,使用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.

【讨论】:

    【解决方案2】:

    您可以通过反转字节数组来实现。所以首先用这个方法将你的字符串转换为字节数组:

    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();
    }
    

    使用类似:

    string reversedString = ByteArrayToString(byteArray);
    

    最后将其转换为您提到的int

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

    就是这样。希望对您有所帮助。

    【讨论】:

    • 你不需要解析每个单独的字符,你可以使用int.Parse和BitConverter.GetBytes,如MSDN所示。您也不需要将字节数组转换为字符串以获得 int,BitConverter.ToInt32 将直接执行此操作
    • 没错,有更短的方法来实现它,但这个也有效。是我第一个想到的……
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    相关资源
    最近更新 更多