【问题标题】:Convert String[] to byte[] array将 String[] 转换为 byte[] 数组
【发布时间】:2012-05-18 20:34:23
【问题描述】:

我正在尝试将此字符串数组转换为字节数组。

string[] _str= { "01", "02", "03", "FF"};byte[] _Byte = { 0x1, 0x2, 0x3, 0xFF};

我尝试了以下代码,但它不起作用。 _Byte = Array.ConvertAll(_str, Byte.Parse);

而且,如果我可以将以下代码直接转换为字节数组会更好: string s = "00 02 03 FF"byte[] _Byte = { 0x1, 0x2, 0x3, 0xFF};

【问题讨论】:

  • 我假设所有的字符串都描述了十六进制数字?
  • 是的,它在 str 部分丢失:)

标签: c# arrays string byte


【解决方案1】:

这应该有效:

byte[] bytes = _str.Select(s => Convert.ToByte(s, 16)).ToArray();

使用Convert.ToByte,您可以指定要转换的基数,在您的情况下是 16。

如果你有一个用空格分隔值的字符串,你可以使用String.Split来分割它:

string str = "00 02 03 FF"; 
byte[] bytes = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();

【讨论】:

  • @AhmadHafiz cool :) 还添加了转换字符串的解决方案。如果对您有帮助,您可以将我的回复标记为答案:)
  • 我知道这个帖子很旧,但我在这里遇到了问题。如果我将我的 string[] 转换为 byte[] 我会得到例如 [0] "70" string [1] "34" string [2] "0A" string to [0] 112 byte [1] 52 byte [2] 10 字节但我需要与字节相同的字符。
  • @Noli 他们相同的。 “0A”是十六进制的 10。它只是以十进制格式显示。该值是正确的。
  • 哦,原来如此......我花了好几个小时......但是非常感谢你!谢谢!
  • 您的代码无法解析...此解决方案运行良好。 stackoverflow.com/a/11268578/4425004
【解决方案2】:

尝试使用 LINQ:

byte[] _Byte = _str.Select(s => Byte.Parse(s)).ToArray()

【讨论】:

  • 无济于事。他的问题是Byte.Parse 不会接受十六进制格式的字符串。
【解决方案3】:

用LINQ是最简单的方法:

byte[] _Byte = _str.Select(s => Byte.Parse(s, 
                                           NumberStyles.HexNumber,
                                           CultureInfo.InvariantCulture)
                          ).ToArray();

如果你有一个字符串string s = "0002FF";,你可以使用this answer

【讨论】:

    【解决方案4】:

    如果您愿意,您仍然可以使用Array.ConvertAll,但您必须指定基数为 16。所以要么

    _Byte = Array.ConvertAll(_str, s => Byte.Parse(s, NumberStyles.HexNumber));
    

    _Byte = Array.ConvertAll(_str, s => Convert.ToByte(s, 16));
    

    【讨论】:

    • 不知道那个解决方案。不错:)
    • 当然你可以使用string[] _str = stringWithSpaces.Split(' ');来创建_str,正如其他人所指出的那样。
    【解决方案5】:

    如果你想使用 ConvertAll,你可以试试这个:

    byte[] _Byte = Array.ConvertAll<string, byte>(
        _str, s => Byte.Parse(s, NumberStyles.AllowHexSpecifier));
    

    【讨论】:

      【解决方案6】:

      试试这个:

      var bytes = str.Select(s => Byte.Parse(s, NumberStyles.HexNumber)).ToArray();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 2011-02-15
        • 2023-03-10
        • 2012-10-07
        • 2012-01-02
        • 2018-08-15
        相关资源
        最近更新 更多