Your explanations about pointers are 100% correct but it is not clear why you are interleaving them with my other explanations which makes it look as if you were trying to correct my comments but since there is nothing wrong with my comments, they are not conflicting, it is impossible to correct any mistakes. This will only confuse the reader.
2012/7/9 Hans-Peter Diettrich <[email protected]>: >> Its really just a simple record with 4 numbers in it. > > With 4 pointers in it, aligned to 8 byte boundaries. No, it contains the numbers directly. There are no pointers in the data. This other translation: type PInt32 = ^Int32; var data: Pointer; seqence_crc: Int64; seqence_key: Int64; compr_crc: Int64; compr_len: Int32; begin seqence_crc:=PInt64(data)^; seqence_key:=PInt64(@data[8])^; compr_crc:=PInt64(@data[16])^; compr_len:=PInt32(@data[24])^; based on the one from Marco in the second mail (I only changed the type of compr_len) which is also correct also clearly shows (clearly because its written in a readable language) that its just simply reading the values directly from the buffer whose address (the pointer to its first byte) is given in the variable data. My initial translation with the record was 100% correct. Here it is again, this time using the IntXX type names for better comparison: type PDataHeader = ^TDataHeader; TDataHeader = record sequence_crc: Int64; sequence_key: Int64; compr_crc: Int64; compr_len: Int32; end; var data: PDataHeader; The variable data would then be of type PDataHeader (I assume it is a header of something, so data would point to the first byte of that "something") and accessing the sequence_crc would go like this: data^.sequence_crc or if you enable autoderef it becomes even nicer: data.sequence_crc Bernd -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
