&
- побитовый оператор and
.
~
id - битовый унарный оператор not
.
~ 7 - это число со всеми установленными младшими 3 битамив 0.
& ~7
делает все младшие 3 бита 0 для того, что находится слева.
(char *)
справа от назначения - это жесткое приведение к char *
int(buf)
- это жесткое приведение buf
к целому числу.
Этот код можно записать на паскале следующим образом:
var pAlignedBuf: PChar;
pAlignedBuf := PChar((integer(Buf) + 7) and (not 7))
И этоспособ получить 8-байтовый выровненный буфер из Buf
.Он работает, увеличивая Buf на 7, а затем сбрасывая младшие 3 бита.
Редактировать
Чтобы быть в безопасности, так как Delphi 64 bitнемного за углом, этот код может быть выражен как:
var pAlignedBuf: PChar;
pAlignedBuf := PChar(NativeUInt(Buf) + 7) and (not 7))
А для тех, кто не любит побитовую логику-фу, он может быть снова переписан как:
var pAlignedBuf: PChar;
pAlignedBuf := PChar(((NativeUInt(Buf) + 7) div 8) * 8);