шестнадцатеричный сектор смещения

Я получаю ответ от сервера имен, длина которого превышает 512 байт. в этом ответе есть некоторые смещения. смещение от начала ответа проходит нормально, но когда я превышаю 512 байт, смещение меняется и больше не работает.

c0 0c = байт 12 с самого начала (работает как шарм)

у меня есть смещение: c1 f0 что означает (насколько мне известно)

c1 = 1 x 512 = 512
f0 = 240

c1 f0= байт 240 из байта 512 == байт 752

мое смещение должно указывать на начало имени, которое должно быть расположено в байте 752, но в байте 752 имя не находится.

Вопрос
как работает смещение после 512 байт?


person Gert Kommer    schedule 19.12.2012    source источник


Ответы (1)


Это относительная ссылка. Чтобы указать, что это относительная ссылка, первые 2 бита «зарезервированы». Вы можете ссылаться максимум на 14 бит: 2 байта с 2 старшими битами зарезервированы. C0 01 является смещением опорной точки 1. Следовательно, это не всегда должно быть C0. это также может быть C1, C2, C3, C4, CF и т. д. На практике это будет довольно редко, если только у вас нет очень сложных длительных запросов, что имеет место. У меня есть запрос на 3000+ байт :)

C1 = 11000001
удалить 2 старших бита: 000001
число = 1

смещение C1 F0 равно 1 x 256 + 240 = 496
смещение C9 9F равно 9 x 256 + 159 = 2463

в одном байте 256 комбинаций, а не 512, которые используются :S
Максимум C0 равен C0 FF, то есть 255. после этого начинается C1 00

Кредиты этого объяснения идут по адресу http://www.helpmij.nl/forum/member.php/215405-wampier

person Gert Kommer    schedule 20.12.2012