Ну, я бы, наверное, прочитал в буфер, который был объявлен с использованием более подходящего типа.
Например, предположим, что ваши данные являются 16-битными целыми числами, Smallint
в Delphi. Затем объявите динамический массив Smallint
.
var
buf: array of Smallint;
Затем выделить достаточно места для данных:
Assert(ckiData.cksize mod SizeOf(buf[0])=0);
SetLength(buf, ckiData.cksize div SizeOf(buf[0]));
А потом читать буфер:
mmioRead(HMMIO, PAnsiChar(buf), ckiData.cksize);
Теперь вы можете получить доступ к элементам, как Smallint
значений.
Если у вас разные типы элементов, вы можете настроить объявление массива. Если вы до сих пор не знаете, какой тип элемента вам может быть лучше, используйте array of Byte
, а затем используя арифметику указателей и кастинг для доступа к фактическому содержимому.
Я бы сказал, что дизайн интерфейса до mmioRead
немного слаб. Буфер не является строкой. Вероятно, это лучше всего рассматривать как массив байтов. Но, возможно, потому, что C не имеет отдельных байтов и типов символов, функция объявляется как принимающая указатель на массив символов. На самом деле перевод Delphi лучше показал бы указатель на байт или даже лучше, на мой взгляд, простой нетипизированный тип Pointer
.
Я предположил, что вы боретесь с интерпретацией результатов mmioRead
поскольку это код, который вы включили в этом вопросе. Но, согласно теперь удаленным комментариям, ваш вопрос является вопросом GUI.
Вы хотите добавить материал в памятку. Как это так:
Memo1.Clear;
for i := low(buf) to high(buf) do
Memo1.Items.Add(IntToStr(buf[i]));
Если вы хотите конвертировать с плавающей точкой, то, по-прежнему предполагая, 16-разрядные данные, сделать это:
Memo1.Clear;
for i := low(buf) to high(buf) do
Memo1.Items.Add(FormatFloat('0.00000', buf[i]/32768.0));//show 5dp
ThankYou очень .. почему я не думаю, что эти Uuh –
Могу ли я спросить еще 1, почему я получаю ** NAN ** значение при попытке прочитать .wav-файл и непосредственно хранить его данные образца в ** double **? разве это не разрешено? Мне просто интересно. –
Это происходит, когда код чтения неверен, и вы читаете данные, которые на самом деле не являются двойными. –