Попробуйте:
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 отдельно. Обратите внимание, что istream - это потоковый класс, а не интерфейс IStream, в C ++. Эквивалентом Delphi является TStream. Код предполагает, что поток открыт для чтения (Create-d с правильными параметрами), а текущий указатель потока указывает на число (dim) ANNcoords, как это делает код C ++.
FWIW in >> p[i]
читает ANNcoord
из входного потока in
в p[i]
, интерпретируя p
как указатель на массив ANNcoords
.
Обновление
Как указал Роб Кеннеди, in >> myDouble
читает двойной из входного потока, но поток интерпретируется как текст поток, а не двоичный, то есть он выглядит следующим образом:
1.345 3.56845 2.452345
3.234 5.141 3.512
7.81234 2.4123 514.1234
etc...
AFAIK не имеет эквивалентного метода или операции в Delphi для потоков. Для этой цели есть только System.Read
и System.Readln
. Очевидно, Peter Below однажды написал unit StreamIO
, который позволяет использовать System.Read
и System.Readln
для потоков. Я мог найти только одну версию в сообщении группы новостей.
Вероятно, имеет смысл написать обертку для потоков, которые могут читать двойные числа, целые числа, одиночные числа и т. Д. Из их текстовых представлений. Я еще не видел.