翻译C++程序,很好赚分!!!(200分)

  • 主题发起人 主题发起人 microming
  • 开始时间 开始时间
M

microming

Unregistered / Unconfirmed
GUEST, unregistred user!
近日在网上得到一C++BUILDER的程序,是一个转换的过程。我只能以学DELPHI的功力把其看懂
但不知如何转换为DELPHI的程序,因为其中用到很多指针,那些汉字是我翻译的。只能说个大概。
哪位大虾可否帮我译为DELPHI的源程,最好详细一点,本人说话算话,愿以200大洋相赠!
void ConvertSaveData(TStream *SaveData, TStream *OutStream)//参数为一内存数据流
{
TMemoryStream *header, *buffer, *bufIndex; //定义指针
char item1[8], item2[8]; //定义数指
long n; //整型变量
unsigned short w; //短整变量
header = new TMemoryStream; //开避内存区域,多大呢???
buffer = new TMemoryStream; //开避内存区域,多大呢???
bufIndex = new TMemoryStream; //开避内存区域,多大呢???
while(SaveData->Position<SaveData->Size) //比较指针是否超界,??:此时的POSITiON在何处,0或1
{
//process header
SaveData->ReadBuffer(item1, 8); //从SAVEDATA读取8个字符至ITEM1
header->Seek(0, soFromBeginning); //??是否为定位于第0个字符
while(header->Position<header->Size) //同上
{
header->ReadBuffer(item2, 8); //读8个字符,此时指针在第0位开始
if(memcmp(item1,item2,8) == 0) //比较8个字符
goto HEADER_EXIST; //相等转
}
//add to header
header->Seek(0,soFromEnd);//??定位于最后的什么地方
header->WriteBuffer(item1, 8); //写缓存
HEADER_EXIST:
//process buffer index & buffer
n = buffer->Position;// ???此时的N 在什么地方呢?
bufIndex->WriteBuffer(&n, sizeof(n));//??有写入吗?
buffer->WriteBuffer(item1,8); //put the header
while(true)
{
if(SaveData->Position>=SaveData->Size)
break;
SaveData->ReadBuffer(&w,2); //读
buffer->WriteBuffer(&w,2); //写
if(w == 0xafaf) //标志
break;
}
}
//prepare outStream//未译
n = header->Size;
header->Seek(0,soFromBeginning);
OutStream->WriteBuffer(&n,4);
OutStream->CopyFrom(header,n);
n = bufIndex->Size;
bufIndex->Seek(0,soFromBeginning);
OutStream->WriteBuffer(&n,4);
OutStream->CopyFrom(bufIndex,n);
n = buffer->Size;
buffer->Seek(0,soFromBeginning);
OutStream->WriteBuffer(&n,4);
OutStream->CopyFrom(buffer,n);
delete header;
delete buffer;
delete bufIndex;
}
 
太简单的问题大概没人愿意答
new X ---> new(X)
delete X --> delete(X)
-> ---> .
= ----> :=
{ }就不用说了,大致如此吧
 
有老兄你把代码贴上来的时间,翻译都可以完成了。根本没用模板、多重继承、
算符重载……替换就解决了。
 
if(memcmp(item1,item2,8) == 0) 此句可否用字符比较完成
SaveData->ReadBuffer(&w,2);
buffer->WriteBuffer(&w,2);
上两句还有其它地方的&在DELPHI中该如何处理呢?我本人很菜,能否请各位大侠花
点时间帮我重译一遍,本人先谢过!
 
TMemoryStream *header, *buffer, *bufIndex;
char item1[8], item2[8]; //定义数指
long n; //整型变量
unsigned short w; //短整变量
header = new TMemoryStream; //开避内存区域,多大呢???
buffer = new TMemoryStream; //开避内存

Header,Buffer,BufIndex : TMemoryStream;
item1,item2 : String[8];
n : integer;
w : Byte;
Header := TMemoryStream.Create;
Header := TMemorySteam.Create;




 
procedure ConvertSaveData(SaveData :TStream;var OutStream :TStream);
 
while(SaveData.PositionSize>0) do
begin
SaveData.ReadBuffer(item1, 8); //从SAVEDATA读取8个字符至ITEM1
header.Seek(0, soFromBeginning);
if(item1=item2)then goto headexit;
end;
 
谢谢大虾们的关心与支持
header = new TMemoryStream; //我知道可用CREATE开避内存区域大小为零,
现在主要问题是如何理解(&)的用法,不知在DELPHI中如何翻译.其余看HELP都可以解决!
问题是上面未译的部分 is &注意C中的&宏替换在DELPHI如何实现!
 
& -> @
 
两个都是取地址,不是什么宏,楼上已经说了
 
我改了一下,但没调试,你试一下
procedure ConvertSaveData(SaveData,OutStream:TStream);
var
header,buffer,bufIndex:TMemoryStream;
item1,item2:array[0..7] of char;
n:Longint;
w:Shortint;
Label
HEADER_EXIST;
begin
header:=TMemoryStream.Create;
buffer:=TMemoryStream.Create;
bufIndex:=TMemoryStream.Create;
while(SaveData.Position<SaveData.Size) do//此处应是原程序有错,因为TMemoryStream没有positionsize属性
begin
SaveData.ReadBuffer(item1, 8); //从SAVEDATA读取8个字符至ITEM1
header.Seek(0, soFromBeginning); //??是否为定位于第0个字符
while(header.Position<header.Size) do //同上
begin
header.ReadBuffer(item2, 8); //读8个字符,此时指针在第0位开始
if strcomp(item1,item2) = 0 then //比较8个字符
goto HEADER_EXIST; //相等转
end;
//add to header
header.Seek(0,soFromEnd);//??定位于最后的什么地方
header.WriteBuffer(item1, 8); //写缓存
HEADER_EXIST:
//process buffer index & buffer
n := buffer.Position;// ???此时的N 在什么地方呢?
bufIndex.WriteBuffer(@n,sizeof(n));//??有写入吗?
buffer.WriteBuffer(item1,8); //put the header
while true do
begin
if SaveData.Position>=SaveData.Size then
break;
SaveData.ReadBuffer(@w,2); //读
buffer.WriteBuffer(@w,2); //写
if w = $afaf then //标志
break;
end;
end;
//prepare outStream//未译
n := header.Size;
header.Seek(0,soFromBeginning);
OutStream.WriteBuffer(@n,4);
OutStream.CopyFrom(header,n);
n := bufIndex.Size;
bufIndex.Seek(0,soFromBeginning);
OutStream.WriteBuffer(@n,4);
OutStream.CopyFrom(bufIndex,n);
n := buffer.Size;
buffer.Seek(0,soFromBeginning);
OutStream.WriteBuffer(@n,4);
OutStream.CopyFrom(buffer,n);
header.free;
buffer.free;
bufIndex.free;
end;



 
感谢各位大虾的热心帮助,同时也特别感谢SONIC的热心讲解,我也早试过程序了,知道不行
才放到网上请大家帮忙的。其中一点比较不理解的是C++的READBUFFER中第一个参数是用指针
所以之前的语句一般用BUFFER.POSITION 或SIZE 作为其地址范围的指针,而DELPHI第一个参数
是用PCHAR,所以程序编译提示需可变变量.都是在几个@的地方,哪位大虾可否帮我解释一下程序
或用其它方法实现亦可.急盼!!!
 
对不起,那天要去吃饭,所以代码没有调试.
你只要再定义二个变量
pw,pn:pointer;
再在每个有@w,@n之前为他们赋值:pw:=@w,pn=@n
在readbuffer,writebuffer中用pw,pn代换@w,@n就可以了,我调试了编译通得过的
 
sonic thank you!
 
后退
顶部