[英]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)
重載中指定index
和count
。
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.