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