Показать сообщение отдельно
Старый 08.06.2011, 02:39   #1749
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

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);
...

Вроде нигде не ошибся

Последний раз редактировалось Kilatif, 08.06.2011 в 02:42.
Kilatif вне форума   Ответить с цитированием
За это сообщение Kilatif нажился спасибкой от: