【问题标题】:Convert ASCII in a byte array to string将字节数组中的 ASCII 转换为字符串
【发布时间】:2013-09-05 03:34:32
【问题描述】:

我在 C# 中的字符串转换似乎有问题。 我的应用程序收到了一个由 ASCII 字符串(每个字符一个字节)组成的字节数组。不幸的是,它在第​​一个位置也有一个 0。那么如何将此字节数组转换为 c# 字符串呢? 以下是我尝试转换的数据示例:

byte[] exampleByteArray = new byte[] { 0x00, 0x52, 0x50, 0x4D, 0x20, 0x3D, 0x20, 0x32, 0x35, 0x35, 0x2C, 0x36, 0x30, 0x0A, 0x00 };
string myString = null;

我做了几次不成功的尝试,所以我想寻求帮助。 最终我需要将字符串添加到列表框:

listBox.Items.Add(myString);

列表框中所需的输出:“RPM = 255,630”(有或没有换行符)。 字节数组将是可变长度的,但总是以 0x00 结束

【问题讨论】:

    标签: c# string bytearray


    【解决方案1】:
    byte[] exampleByteArray = new byte[] { 0x00, 0x52, 0x50, 0x4D, 0x20, 0x3D, 0x20, 0x32, 0x35, 0x35, 0x2C, 0x36, 0x30, 0x0A, 0x00 };
    exampleByteArray = exampleByteArray.Where(x=>x!=0x00).ToArray(); // not sure this is OK with your requirements 
    string myString =  System.Text.Encoding.ASCII.GetString(exampleByteArray).Trim();
    

    结果:

    RPM = 255,60

    您可以将此添加到listBox

    listBox.Items.Add(myString);
    

    更新:

    根据新评论 字节数组在尾随 0x00 之后可能包含垃圾(先前字符串的残余)。

    你需要先跳过0x00,然后考虑字节,直到你得到0x00,所以你可以使用Linq的力量来完成这个任务。例如ASCII.GetString(exampleByteArray.Skip(1).TakeWhile(x => x != 0x00).ToArray())

    【讨论】:

    • 哦,这么近!我忘了提到字节数组在尾随的 0x00 之后可能包含垃圾(先前字符串的残余)...
    • 这肯定胜过 for 循环,谢谢!
    【解决方案2】:
     byte[] exampleByteArray = new byte[] { 0x00, 0x52, 0x50, 0x4D, 0x20, 0x3D, 0x20, 0x32, 0x35, 0x35, 0x2C, 0x36, 0x30, 0x0A, 0x00 };
     string myString = System.Text.ASCIIEncoding.Default.GetString(exampleByteArray);
    

    结果:myString = "\0RPM = 255,60\n\0"

    【讨论】:

      【解决方案3】:
      var buffer = new byte[] { 0x00, 0x52, 0x50, 0x4D, 0x20, 0x3D, 0x20, 0x32, 0x35, 0x35, 0x2C, 0x36, 0x30, 0x0A, 0x00 }
          .Skip(1)
          .TakeWhile(b => b != 0x00).ToArray();
      
      Console.WriteLine(System.Text.Encoding.ASCII.GetString(buffer));
      

      【讨论】:

        猜你喜欢
        • 2013-01-31
        • 2011-01-13
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多