глупый я пытается преобразовать байтовый массив, полученный из внешнего источника, не находящегося под моим контролем, в строку. (И да, я знаю о 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 );
}