On 08.07.2012 17:18, Hans-Peter Diettrich wrote: > Bernd schrieb: >> 2012/7/7 Marco van de Voort <[email protected]>: > IMO all these members should be pointers, of size 64 bit according to > the index increment (8 bytes?). Typecasts will be needed for 32 bit > pointers, as demonstrated in above code.
Wait a monment, I have again looked at it. I think I was right and my other email admitting that I was wrong was wrong. seqence_crc = *((int64_t*)data); seqence_key = *((int64_t*)&data[8]); from the inside out: data is a pointer, say it points to a buffer (int64_t*)data still points to that buffer *((int64_t*)data) are bytes 0..7 of that buffer as int64. now the second line seqence_key = *((int64_t*)&data[8]); data[8] is the same as *(data+8) data[8] represents the 8th byte of that buffer (already dereferenced!) &data[8] is the address of that byte &data[8] would be the same as (data+8) ((int64_t*)&data[8]) is still the same pointer *((int64_t*)&data[8]) are bytes 8..17 of that buffer as int64 this should be equivalent: seqence_crc = *((int64_t*)&data[0]); seqence_key = *((int64_t*)&data[8]); compr_crc = *((int64_t*)&data[16]); compr_len = *((int32_t*)&data[24]); and this also: seqence_crc = *((int64_t*)data); seqence_key = *((int64_t*)(data+8)); compr_crc = *((int64_t*)(data+16)); compr_len = *((int32_t*)(data+24)); Its really just a simple record with 4 numbers in it. Bernd -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
