这段代码转成delphi是什么样的?习惯了c++,一时半会转不过来,不大习惯pascal的指针操作和类型。
BYTE * test(BYTE *src, int len, BYTE *des)
{
BYTE * now;
BYTE *last;
BYTE *temp;
int a;
if ( len )
{
now=src;
temp=src+57
last=src+len;
while ( temp <= last )
{
for ( ; temp != now; des += 4 )
{
a=(*(now+1))|((*(now+1)|(*now <<8))<<8);
now+=3;
*(BYTE *)(des + 3) = table[a & 0x3F];
a = (unsigned int)a >> 6;
*(BYTE *)(des + 2) = table[a & 0x3F];
a = (unsigned int)a >> 6;
*(BYTE *)(des + 1) = table[a & 0x3F];
*des = table[(unsigned int)a >> 6];
}
*(_BYTE *)des= 13;
*(_BYTE *)(des + 1) = 10;
des += 2;
temp += 57;
}
}
return des;
}
BYTE * test(BYTE *src, int len, BYTE *des)
{
BYTE * now;
BYTE *last;
BYTE *temp;
int a;
if ( len )
{
now=src;
temp=src+57
last=src+len;
while ( temp <= last )
{
for ( ; temp != now; des += 4 )
{
a=(*(now+1))|((*(now+1)|(*now <<8))<<8);
now+=3;
*(BYTE *)(des + 3) = table[a & 0x3F];
a = (unsigned int)a >> 6;
*(BYTE *)(des + 2) = table[a & 0x3F];
a = (unsigned int)a >> 6;
*(BYTE *)(des + 1) = table[a & 0x3F];
*des = table[(unsigned int)a >> 6];
}
*(_BYTE *)des= 13;
*(_BYTE *)(des + 1) = 10;
des += 2;
temp += 57;
}
}
return des;
}
解决方案 »
- 请教各位哥哥一个简单的数据调用问题.
- 关于TNMHTTP的使用
- StringGrid设置行高问题
- 排序代码错误,help!在线给分
- 急急急。Dephi 中如何调用 ActiveX控件。
- 如何放大bmp图象,而又不失真,答得好的有50分
- 距离教远的A,B两地,A地工作站如何远程访问B地的WIN2000/SQL SERVER服务器?
- 请问下各位前辈有没有通过识别图像的原理来写过计牌器的,请指点下!!!
- ???????为什么ActiveForm的Destroy事件不起作用?
- 怎样用postMessage发送字符窜,一定给分
- 如何使停靠窗口和主窗口同时保持活动状态(Floating状态的停靠窗口和标题窗口的标题栏保持选中蓝色)
- 100分FastReport4.5以上版本求助:4.5修正了TotalPages#变量的Bug,但我的现在反而出问题了,打印出来有其它多余的字符
其他的就容易了.
function test(src:pbyte; len:integer; des:pbyte):pbyte;
var
now,last,temp:pbyte;
a:integer;
begin
if len>0 then
begin
now:=src;
temp:=src;
inc(temp,57);
last:=src;
inc(last,len);
while ( Integer(temp) <= integer(last) ) do
begin
while Integer(temp) <> integer(now) do
begin
//a=(*(now+1))|((*(now+1)|(*now <<8))<<8);
a:=integer(now^);
a:=a shl 8;
inc(now);
a:=a or Integer(now^);
a:=a shl 8;
a:=a or integer(now^);//-_-!!,感觉有点累......DELPHI指针操作没有C++这么强大......
//now+=3;
inc(now,3);
//*(BYTE *)(des + 3) = table[a & 0x3F];
inc(des,3);
des^=Byte(a and $3F);
........
inc(des ,4);
end;
end;
end;
end;
a = (unsigned int)a >> 6;这个强制类型转成unsigned int在pascal里面是咋样的?
DELPHI: word.a:=Word(a) shr 6;其实就是取低16位来运算吧.把前面两个字节码去除了.也可以这样操作a:=(a and $0000FFFF) shr 6;