@shnegs
стандартный

Как соотнести структуру и указатель на массив?

Есть структура
TLevel2Pack=packed record
  SrcAddr:word; //source address
  DstAddr:word; //receiver address
  PId:byte;     //Packet id
  Cmd:byte;   // Command code
  Flags:byte;  //options
  Status:byte; //command status
  DataLen:word; //length of data
  Data:array[0..RecBuffSizeByte-1] of byte;  //data
  end;

PLevel2Pack=^TLevel2Pack;

Есть так же массив
RecData:array[0..RecBuffSizeByte-1] of byte;
Используется:
if (((InLen+2)=RecPtr) and (InLen=(PLevel2Head(@RecData)^.DataLen+sizeof(TLevel2Head))))

В этом коде массив отображается по адресам структуры и поле DataLen?
PLevel2Head(@RecData)^.DataLen
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
@mvv-rus
Настоящий админ AD и ненастоящий программист
1. Вы не написали, что такое TLevel2Head/PLevel2Head. Я так понимаю, что это TLevel2Pack без поля Data, и укзатель на него? Если нет, то я ничего тут не понимаю.
Если да, то структура TLevel2Pack - это пакет данных с заголовком TLevel2Head и данные переменной длины.
2. Тогда InLen - это, по смыслу (по второй проверке из if), полная длина буфера с данными , а откуда она берется и с чем она сравнивается в первой проверке - я без понятия, потому что нужного для этого кода не вижу.
3. На вопрос "как соотнести" ответ - взять указатель на массив (@) и преобразовать его в указатель на структуру (PLevel2Head(@RecData)^). Так что, если RecData - это буфер с "сырыми" данными (и см. п.1), то понимаете вы правильно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы