簡體   English   中英

將字節數組中的ASCII轉換為字符串

[英]Convert ASCII in a byte array to string

我似乎在使用C#進行字符串轉換時出現問題。 我的應用程序收到一個由ASCII字符串組成的字節數組(每個字符一個字節)。 不幸的是,它在第​​一個位置也有0。 那么如何將這個字節數組轉換為ac#string呢? 以下是我要轉換的數據示例:

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

listBox中的所需輸出:“RPM = 255,630”(帶或不帶換行符)。 字節數組將是可變長度,但始終以0x00結尾

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

 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"

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

暫無
暫無

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

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