Я полагаю, это как-то связано с непечатными символами. Например, этот код C #:
string message = "Hello\0 Hello2";
Debug.Print(message);
Здесь у меня есть строка с нулевым символом в конце. В визуализаторе отладки он отображается так же, как я создал эту строку - "Hello\0 Hello2"
. Но в окне вывода он не отображает \0
и даже усекает Hello 2
. Поэтому я думаю, что это относится к вашей проблеме, хотя я не мог воспроизвести ее полностью. Проверьте свой messagePart.Length
.
ОБНОВЛЕНИЕ: Хорошо, поэтому, пройдя все эти комментарии здесь и в другом ответе, я думаю, что проблема вызвана неправильным использованием readBodyBuffer
. Это зависит от того, как вы распределяете этот буфер, но я ожидаю, что вы просто создаете новый байтовый массив с фиксированной (11) длиной. Затем вы игнорируете количество байтов, которые были фактически получены (10), и конвертируете строку из этого массива, используя кодировку ASCII. Тот факт, что BytesRead
меньше выделенного размера буфера, приводит к тому, что последний байт в массиве равен нулю. Вам следует использовать метод Encoding.ASCII.GetString
, который принимает аргумент length
, чтобы вы не получили \0
в строке результата:
messagePart = Encoding.ASCII.GetString(readBodyBuffer, 0, ReadBytes)