簡體   English   中英

來自字節數組的字符串不會在C#中被修剪?

[英]String from byte array doesn't get trimmed in C#?

我有一個類似於此的字節數組(16字節):

71 77 65 72 74 79 00 00 00 00 00 00 00 00 00 00

我用它來將它轉換為字符串並修剪結束空格:

ASCIIEncoding.ASCII.GetString(data).Trim();

我得到的字符串很好,但它仍然有所有結束空格。 所以我得到類似"qwerty.........."東西(其中點是StackOverflow的空格)。

我究竟做錯了什么?

我也嘗試使用.TrimEnd()並使用UTF8編碼,但它不會改變任何東西。

提前致謝 :)

你必須做TrimEnd(new char[] { (char)0 }); 解決這個問題。 它不是空格 - 它實際上是奇怪轉換的空字符。 我也有這個問題。

他們不是真正的空間:

System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')

......應該做的伎倆。

-Oisin

默認情況下修剪僅刪除空格 ,其中空格由char.IsWhitespace定義。

'\\0'是控制字符,不是空格。

您可以使用Trim(char[])重載指定要修剪的Trim(char[])

string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });

在powershell中,您可以這樣做:

$yourString.TrimEnd(0x00)

為什么要先嘗試創建字符串然后再修剪它? 這可能會增加很多開銷(如果byte []很大)。

您可以在GetString(byte[] bytes, int index, int count)重載中指定indexcount

int count = data.Count(bt => bt != 0); // find the first null
string result = Encoding.ASCII.GetString(data, 0, count); // Get only the characters you want

暫無
暫無

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

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