Цитата:
Сообщение от acmi
Вы наверно замечали что файл Icon.utx во многих программах открывается криво.
В оригинальном формате строка записывается как 1 байт длина + строка с нулевым символом в конце. В клиенте Lineage 2 немного по-другому: длина это INDEX, если она положительна то это ASCII строка, и каждый символ занимает 1 байт, если отрицательна, то это UTF-16, и символ занимает 2 байта. Строка так же заканчивается нулевым символом.
|
Странный у Вас гайд получился.
То, про что Вы говорите, называется semi-utf string, либо можно еще назвать mutable utf string. Смысл такой строки - возможность сокращения объема данных в тех случаях, когда UTF-кодирование не требуется (использование символов только из стандартной таблицы (например, ASCII) - тот самый случай).
Конкретные цифры описывать не буду (те кому надо, сами смогут разобраться), но:
- Первый байт это не INDEX, как Вы его назвали, а та же длина, только значение ее на X меньше, настоящего;
- Плюс ко всему, Вы забыли про указание кол-ва блоков этой строки, которое может присутствовать, а может и нет - в зависимости от типа строки;
- В случае с UTF нулевой символ также содержит 2 байта.
Ковырянием текстур не занимаюсь, но такая же структура имеется в датках клиента. Пришлось выпить немало чашек кофе, чтобы расковырять этот формат при написании редактора
Ну и на мой взгляд - дебильнейший формат, хотя в файлах с большим объемом строк может сохранить от 5 до 50% объема файла.
Не сочтите за оффтоп - может быть инфа кому-нибудь и пригодится.