簡體   English   中英

C#字符串至字節[]

[英]C# String to Byte[]

我想將字符串轉換為字節並將其輸出為字節數組。

示例:字符串:3074輸出:0C02

    private static byte[] ConvertHexToBytes(string input)
    {
        var result = new byte[(input.Length + 1) / 2];
        var offset = 0;
        if (input.Length % 2 == 1)
        {
            result[0] = (byte)Convert.ToUInt32(input[0] + "", 16);
            offset = 1;
        }
        for (int i = 0; i < input.Length / 2; i++)
        {
            result[i + offset] = (byte)Convert.ToUInt32(input.Substring(i * 2 + offset, 2), 16);
        }
        return result;
    }
    private static void SetValue(string input)
    {
        byte[] port = ConvertHexToBytes(input);
        byte[] port = new byte[] { byte.Parse("" + port[0]), byte.Parse("" + port[1]) };
    }

我得到3074而不是0C02。

剛弄清楚,這是我的代碼

    private static void SetValue(string input)
    {
        byte[] port = BitConverter.GetBytes(int.Parse(input));
        byte[] res= new byte[] { port[1], port[0] };
    }

似乎您正在使用int ,而不是string (“我想將字符串轉換為字節...”)

  int input = 3074; // 00 00 0C 02

並且您想要修剪前導零並獲取"0C02"字符串; 您可以在Linq的幫助下完成此操作:

  byte[] result = 
    (BitConverter.IsLittleEndian 
        ? BitConverter.GetBytes(input).Reverse() 
        : BitConverter.GetBytes(input))
    .SkipWhile(b => b == 0)
    .DefaultIfEmpty() // we don't want trim all in case of input == 0
    .ToArray();

測試:

  // "0C02" 
  Console.WriteLine(string.Concat(result.Select(b => b.ToString("X2")))); 

將所有內容組合到建議的方法中:

  private static void SetValue(string input) {
    byte[] res = 
      (BitConverter.IsLittleEndian 
         ? BitConverter.GetBytes(int.Parse(input)).Reverse() 
         : BitConverter.GetBytes(int.Parse(input)))
      .SkipWhile(b => b == 0)
      .DefaultIfEmpty() // we don't want trim all in case of input == 0
      .ToArray();

    // Console.WriteLine(string.Concat(res.Select(b => b.ToString("X2")))); 

    //TODO: relevant code here
  }

可以獨立於系統架構的持久性運行的解決方案,這將使事情變得更易於移植:

byte[] bytes = BitConverter.GetBytes(input);

if (BitConverter.IsLittleEndian)
       Array.Reverse(bytes);
 Console.WriteLine("byte array: " + 
      BitConverter.ToString(bytes).Replace("-", string.Empty));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM