Дамп объекта record

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Ответить
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Дамп объекта record

Сообщение DYUMON »

Доброго всем времени суток.
Ранее с подобным не сталкивался, но вот пришлось залезть в дебри.
Допустим есть такой объект

Код: Выделить всё

type
  TLength = array [0..1] of byte;
  TAuthenticatorMask = array  [0..15] of byte;
  TAttributesList = array [0..4075] of byte;

  TRadiusPacket = record
    rCode: byte;
    rIdentifier: byte;
    rLength: TLength;
    rAuthenticator: TAuthenticatorMask;
    rAttributes: TAttributesList;
  end;


Можно ли как то его сдампить , что бы посмотреть что в нем внутри лежит?
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Сдампить - это значит распечатать в удобочитаемой форме?
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

Да не обязательно, просто хотя бы строку получить вида 000102A11C
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

По простому можно так:

Код: Выделить всё

...
uses
   ..., StrUtils, ...

function HexDump(const aBuffer; aBufSize: Integer): string;
begin
  SetLength(Result, aBufSize * 2);
  BinToHex(PChar(@aBuffer), PChar(Result), aBufSize);
end;
...
var
  p: TRadiusPacket;
...
WriteLn('p: ', HexDump(p, SizeOf(p)));

Но если запись не упакована, то придётся самому вычислять, где кончается одно поле и начинается другое.
Аватара пользователя
DYUMON
постоялец
Сообщения: 234
Зарегистрирован: 11.03.2009 12:32:54
Контактная информация:

Сообщение DYUMON »

Благодарю, такой вариант вполне подошел.
Ответить