【问题标题】:C# How to set 0x.. in Byte[]C# 如何在 Byte[] 中设置 0x..
【发布时间】:2017-01-23 11:58:04
【问题描述】:

我想做一个像这样的Byte[]

Byte[] data = { 0x10, 0x02, 0x04, 0x00, 0x00, 0x25, 0x23, 0x05, 0xb1, 0x10, 0x03 };

但我必须从用户那里得到这些。我厌倦了 Console.ReadLine 和转换为 int 或 Byte 或其他任何东西但它们都不起作用,因为 x 不是数字。

问题是我如何从用户那里获取0x100x25 并设置为Byte[]

【问题讨论】:

    标签: c# arrays byte


    【解决方案1】:

    你可以将Split输入的字符串分成块Convert每个块到字节,最后将它们具体化ToArray

     // You can let user input the array as a single string 
     // Test/Demo; in real life it should be 
     // string source = Console.ReadLine();
     string source = "0x10, 0x02, 0x04, 0x00, 0x00, 0x25, 0x23, 0x05, 0xb1, 0x10, 0x03"; 
    
     byte[] result = source
       .Split(new char[] {' ', ':', ',', ';', '\t'}, StringSplitOptions.RemoveEmptyEntries) 
       .Select(item => Convert.ToByte(item, 16))
       .ToArray();
    

    让我们将数组表示为字符串:

     string test = string.Join(", ", result
       .Select(item => "0x" + item.ToString("x2"))); 
    
     // "0x10, 0x02, 0x04, 0x00, 0x00, 0x25, 0x23, 0x05, 0xb1, 0x10, 0x03"
     Console.Write(test);
    

    【讨论】:

      【解决方案2】:

      如果您想在循环中继续存储字节,我建议您在循环之前创建一个列表作为辅助变量。

      List<byte> mylist = new List<byte>();
      

      然后您可以从命令行扫描输入并使用以下方式存储它们:

      mylist.Add(Convert.ToByte(my_input, 16));
      

      最后,您可以简单地将列表转换为数组

      mylist.ToArray();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-05
        • 2012-09-02
        • 2011-08-16
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        相关资源
        最近更新 更多