2010-03-15 48 views
4

我有一個字節數組,它可能有或沒有空字節在它的末尾。將它轉換爲一個字符串後,我在最後有一堆空格。我嘗試使用修剪()來擺脫它,但它不起作用。如何在轉換字節數組後刪除字符串末尾的所有空格?在ASCIIEncoding.GetString(byte [])之後表示空字節的字符是什麼?

我寫這是C#。

+0

字節數組中的值是什麼?你確定字節數組包含一個ASCII字符串而不是Unicode或UTF-8嗎? – 2010-03-15 19:01:32

回答

2
public string TrimNulls(byte[] data) 
{ 
    int rOffset = data.Length - 1; 

    for(int i = data.Length - 1; i >= 0; i--) 
    { 
     rOffset = i; 

     if(data[i] != (byte)0) break;    
    } 

    return System.Text.Encoding.ASCII.GetString(data, 0, rOffset + 1); 
} 

在充分披露的利益,我想是很清楚,這將可靠的ASCII只工作。對於任何多字節編碼,這將廢話牀。

+1

請補充一下,您的解決方案對於ASCII編碼非常適用(如OP所要求的那樣),但是對於其他任何事情都會非常糟糕。 – 2010-03-15 19:03:28

+0

這將工作。謝謝。我希望能夠對結果字符串做類似Trim的事情,但我想不會。謝謝! – Brian 2010-03-15 19:05:43

+0

此解決方案的小錯誤。返回值應爲: return System.Text.Encoding.ASCII.GetString(data,0,rOffset + 1); 否則它會切斷最後一個字節。 – Brian 2010-03-15 19:18:04

6

Trim()在您的情況下不起作用,因爲它僅刪除空格,製表符和換行符AFAIK。它不會刪除'\ 0'字符。你也可以使用這樣的東西:

byte [] bts = ...;

string result = Encoding.ASCII.GetString(bts).TrimEnd('\ 0');

+0

對我來說也許並不是最有效的一個(擁有20k的「0」),但作爲一種魅力。謝謝 – 2015-10-08 16:40:53

相關問題