Raf*_*cci 0 c delphi translation delphi-2010
自从我写了一段C代码以来,我已经很久了.有谁知道如何将这段代码翻译成Delphi 2010?
char * pAlignedBuf = (char *) ((int(buf) + 7) & ~7);
Run Code Online (Sandbox Code Playgroud)
buf在哪里char * buf.
我知道,char *是Pchar的,但我不知道是什么&和~7是.
&是按位运算and符.
~id按位一元运算not符.
~7是一个数字,所有低3位设置为0.
& ~7 对于左侧的任何内容,使所有低3位为0.
该(char *)条件是在转让的右边是一个硬铸铁到char *
int(buf)是buf整数的硬转换.
该代码可以用pascal编写,如下所示:
var pAlignedBuf: PChar;
pAlignedBuf := PChar((integer(Buf) + 7) and (not 7))
Run Code Online (Sandbox Code Playgroud)
它是一种从任何方式获得8字节对齐缓冲区的Buf方法.它的工作原理是将Buf增加7,然后清除低3位.
编辑
为了安全起见,由于Delphi 64位即将到来,该代码可表示为:
var pAlignedBuf: PChar;
pAlignedBuf := PChar(NativeUInt(Buf) + 7) and (not 7))
Run Code Online (Sandbox Code Playgroud)
对于那些不喜欢按位逻辑fu的人,它可以再次重写为:
var pAlignedBuf: PChar;
pAlignedBuf := PChar(((NativeUInt(Buf) + 7) div 8) * 8);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |