Какой символ представляет нулевой байт после ASCIIEncoding.GetString (byte [])? - PullRequest
4 голосов
/ 15 марта 2010

У меня есть байтовый массив, который может иметь или не иметь нулевые байты в конце. После преобразования его в строку у меня есть куча пустого пространства в конце. Я пытался использовать Trim (), чтобы избавиться от него, но он не работает. Как я могу удалить все пустое пространство в конце строки после преобразования байтового массива?

Я пишу это C #.

Ответы [ 2 ]

6 голосов
/ 15 марта 2010

Trim () не работает в вашем случае, потому что он удаляет только пробелы, табуляции и новые строки AFAIK.Он не удаляет символ '\ 0'.Вы также можете использовать что-то вроде этого:

byte [] bts = ...;

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

2 голосов
/ 15 марта 2010
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. Для любого многобайтового кодирования это будет хрень.

...