On 7/8/2012 06:32, Bernd wrote:
2012/7/7 Marco van de Voort<[email protected]>:

    seqence_crc:=pint64(data)^;
    seqence_key:=pint64(@data[8])^;
    compr_crc:=pint64(@data[16])^;
    compr_len:=pint64(@data[24])^;

the above doesn't seem correct... i've been watching and waiting for someone to catch it... i think one did but no one has followed up that...

here is the original from Dave Coventry

>I have the following C code which I'm trying to emulate in Pascal:
>
>  seqence_crc = *((int64_t*)data);
>  seqence_key = *((int64_t*)&data[8]);
>  compr_crc   = *((int64_t*)&data[16]);
>  compr_len   = *((int32_t*)&data[24]);

i see three int64's and one int32... it looks like marco's pint64 on the last line is incorrect and that maybe it should be pint32... this was actually asked about and it was noted that google was returning results for 32 pints of beer or such...

How about defining something more pascalish first, a record type for example:

i would agree with this since it is more readable ;)

{$modeswitch autoderef}

type
   PDataHeader = ^TDataHeader;
   TDataHeader = record
     sequence_crc: QWord;
     sequence_key: QWord;
     compr_crc: QWord;
     compr_len: DWord;
   end;

and it looks like here you did see and allow for 64bit on the first three and 32bit on the last one...


var
   Data: PDataHeader;
   SeqCrc: QWord;
   SeqKey: QWord;
   ...

and as long as CompLen is a DWORD, this should work... i think? or am i missing something on the higher up pint64 stuff??


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to