【问题标题】:From hex string to byteArray C#从十六进制字符串到字节数组 C#
【发布时间】:2012-11-05 08:35:48
【问题描述】:

我输入了字符串:“0080801D803480002A1168301FE16E09” 当我使用代码将其转换为 byteArray 时:

Convert.ToByte(inputWrite.Substring(i, 2), 16);

我在第一个位置得到字节数组 =“0”,但我需要有“00”,所以当我再次将它转换为字符串时,开始时不要得到“08”而是“00”。 我进入string "080801D80348002A1168301FE16E9",像这样我错过了一些重要的0,我需要从最后一个字符串再次转换为字节并转换为十进制值。

【问题讨论】:

标签: c# hex bytearray


【解决方案1】:

一旦您在数组中输入了再见,000 之间就没有区别了。

您需要做的是,将这些字节转换回字符串时,请确保将所有前导零放回。您可以通过调用来做到这一点

string byteAsTwoDigitString = myByte.ToString("X2");

X 表示“十六进制”,2 表示“至少有两位数”。

【讨论】:

    【解决方案2】:

    您也可以使用 LINQ 执行此操作:

     public static byte[] StringToByteArray(string hex) {
    return Enumerable.Range(0, hex.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                     .ToArray();
     }
    

    您也可以参考this

    【讨论】:

      【解决方案3】:

      你似乎把事情搞糊涂了。因为每个字节由两个字符表示,所以字节数组将比字符串短两倍。在解析回来的时候,你必须确保每个字节都必须转换成双字符的字符串,即使它小于 0x10,即不需要第二个字符。

      也就是说,您可以使用以下 LINQ oneliner:

      string convertedBack = string.Join(string.Empty, bytes.Select(x => x.ToString("X2")).ToArray());
      

      【讨论】:

        猜你喜欢
        • 2011-10-01
        • 1970-01-01
        • 2013-08-09
        • 2013-10-13
        • 1970-01-01
        • 2011-03-25
        相关资源
        最近更新 更多