Deffol, два последних байта нулей - обычно так обозначается конец строки, т.к. строка может быть любого размера, то как-то нужно конец обозначить - вот и обозначили двумя байтами нулей при WideString (в такой строке 2 байта определяют 1 символ), как у тебя собственно или еще может быть 1 пара нулей, если это обычная строка (1 символ = 1 байт) Я считаю все что связанно с считыванием строк нужно считывать именно через ReadS, т.к. эта процедура сама определяет где у тебя строка кончается. А именно у тебя это будет так:
Код:
...
var pos : integer; //позиция для чтения в твоем пакете
x : integer; //ID на сообщение в чат
s : string; //твоя строка
...
begin
pos := 1;//ставим позицию для чтения с первого байта пакета;
x := ReadD(pos); //читаем 4 байта ID и переменная pos сразу сместится на 4 байта и станет равна 5
s := ReadS(pos);// считывает строку в переменную s и смещает курсор pos на количество считанных байт
end;
...
А если тебе нужно считать только строку в данном случае это будет выглядеть так:
...
pos := 5;
s := ReadS(pos);
...
Вроде нигде не ошибся