C # convert byte [], содержащий строку в стиле c, в строку - НЕ Encoding.GetString (byte [])

глупый я пытается преобразовать байтовый массив, полученный из внешнего источника, не находящегося под моим контролем, в строку. (И да, я знаю о Encoding.GetString (byte []) .

То, что у меня есть:

void myfunc()
{
    byte[] rawData = new byte[ 128 ];

    for( int i = 0; i < rawData.Length; ++i )
    {
        rawData[ i ] = 0;
    }

    rawData[ 0 ] = (byte)'H';
    rawData[ 1 ] = (byte)'e';
    rawData[ 2 ] = (byte)'l';
    rawData[ 3 ] = (byte)'l';
    rawData[ 4 ] = (byte)'o';


    string asString = Encoding.UTF8.GetString( rawData, 0, rawData.Length );

    string asRealString = Encoding.UTF8.GetString( rawData );
}

Обе строки действительно содержат часть Hello, но также много \ 0 после - чего я не ожидал. Вывод отладчика: asRealString =

"Hello\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"

Можно ли каким-нибудь способом передать мне строку типа «Привет»?

Я пошла ва-банк, но все, что у меня было, это Encoding.GetString (byte []) ...

РЕДАКТИРОВАТЬ : Создание байтового массива выходит за рамки моей компетенции! Я получаю это как часть более крупной структуры C-Style. И нет ведущей длины строки. Также я надеялся, что есть какой-то встроенный способ сделать это, и мне не пришлось искать первое \ o и преобразовывать его, зная длину ....

EDIT Вот что я в итоге использовал:

private static string convertCString( byte[] buffer, int maxLength, Encoding targetEncoding )
{
    int length = 0;
    int realMax = buffer.Length < maxLength ? buffer.Length : maxLength;

    for( 
         ; 0 != buffer[length] && length < realMax
         ; ++length )
    {}

    return targetEncoding.GetString( buffer, 0, length );
}
5
задан Mario The Spoon 11 May 2011 в 14:10
поделиться