从C++;到Delphi(简单) 我在C++中有一个函数,我试图在Delphi中复制: typedef-double-ANNcoord;//坐标数据类型 typedef ANNcoord*ANNpoint;//一点 typedef ANNpoint*ANNpointArray;//一组点 bool readPt(istream&in,ANNpoint p)//读取点(EOF为false) { 对于(int i=0;i>p[i])返回false; } 返回true; }
在Delphi中,我相信我已经正确地声明了数据类型。。(我可能错了):从C++;到Delphi(简单) 我在C++中有一个函数,我试图在Delphi中复制: typedef-double-ANNcoord;//坐标数据类型 typedef ANNcoord*ANNpoint;//一点 typedef ANNpoint*ANNpointArray;//一组点 bool readPt(istream&in,ANNpoint p)//读取点(EOF为false) { 对于(int i=0;i>p[i])返回false; } 返回true; },c++,delphi,zeos,C++,Delphi,Zeos,在Delphi中,我相信我已经正确地声明了数据类型。。(我可能错了): 类型 IPtr=^IStream;//指向Istream的指针 ANNcoord=双精度; ANNpoint=^ANNcoord; 函数readPt(inpt:IPtr;p:ANNpoint):布尔; 变量 i:整数; 开始 对于i:=0,将其变暗 开始 结束; 结束; 但是我无法理解如何模仿C++函数中的行为(可能是因为我不理解位移操作符)。p> 此外,我需要最终弄清楚如何将点集从ZeosTZQuery对象传输到相同的数
类型
IPtr=^IStream;//指向Istream的指针
ANNcoord=双精度;
ANNpoint=^ANNcoord;
函数readPt(inpt:IPtr;p:ANNpoint):布尔;
变量
i:整数;
开始
对于i:=0,将其变暗
开始
结束;
结束;
<>但是我无法理解如何模仿C++函数中的行为(可能是因为我不理解位移操作符)。p>
此外,我需要最终弄清楚如何将点集从ZeosTZQuery
对象传输到相同的数据类型-因此,如果有人对此有任何意见,我将非常感激 试试看:
type
ANNcoord = Double;
ANNpoint = ^ANNcoord;
function readPt(inStr: TStream; p: ANNpoint): boolean;
var
Size: Integer; // number of bytes to read
begin
Size := SizeOf(ANNcoord) * dim;
Result := inStr.Read(p^, Size) = Size;
end;
无需单独阅读每个ANNcoord。注意,ISReAM是流类,而不是C++中的istrAM接口。德尔福的等价物是TStream。代码假定流被打开以读取(创建具有适当参数的Cd—D),当前流指针指向ANCOCORDS的数量(DIM),就像C++代码一样。
FWIWin>>p[i]
从输入流in
到p[i]
读取ANNcoord
,将p
解释为指向ANNcoords
数组的指针
更新
正如Rob Kennedy指出的那样,>>myDouble中的从输入流中读取一个double,但该流被解释为文本流,而不是二进制,即它看起来像:
1.345 3.56845 2.452345
3.234 5.141 3.512
7.81234 2.4123 514.1234
etc...
毫无疑问,Delphi中没有针对流的等效方法或操作。为此,只有System.Read
和System.Readln
。显然,Peter Lower曾经编写了一个单位流IO
,这使得可以对流使用System.Read
和System.Readln
。我只能在新闻组的帖子里找到
为可以从文本表示中读取双精度、整数、单精度等的流编写包装器可能是有意义的。我还没有看到一个。 C++代码有以下几点:(NPTSp
(ANNPoint)添加到dataPts
(ANNPointArray)?TStream.Read
不是此函数的等效函数。C++代码使用<代码> > /Cux>运算符从<代码> istRAMA<代码>中提取值为<代码>双< /代码>。它将流读取为文本,并将每个标记转换为双精度标记。Delphi代码正在以二进制模式读取流,以便将流的每个8字节直接复制到每个数组元素中。@Rob:Oops,看来你是对的。istream::operator>>读取文本,而不是二进制数据。istream::read读取二进制数据。