C#字符串到字节[]

C#字符串到字节[],c#,C#,我想将字符串转换为字节,并将其作为字节数组输出 示例:字符串: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[

我想将字符串转换为字节,并将其作为字节数组输出

示例:字符串: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]) };
    }

似乎您使用的是
int
,而不是
string
(“我想将字符串转换为字节…”)

您需要修剪前导零并获得
“0C02”
字符串;您可以在Linq的帮助下完成:

测试:

将所有这些结合到提议的方法中:

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

这段代码不会编译,因为你在函数setValue中定义了两次端口。只是修复了它,我的问题。如果你找到了答案,请将其作为答案发布
  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));