Конференция "Основная" » Преобразование (приведение) типов. [D7, WinXP]
 
  • novicmen_ (10.03.13 19:45) [0]
    Есть некая структура данных:


    type
     MyStruct = record
        param1: Cardinal;
        param2: LongWord;
        param3: array of Char;
        param4: LongWord;
        end;



    При передаче этой структуры в процедуру:
    CalcCRC32(p: pointer; nbyte: WORD; var CRCvalue: LongInt);


    возникает один момент, нет данных динамического массива.

    Как правильно сформировать данные для передачи в процедуру? Думал в сторону промежуточного массива, в который бы самостоятельно прописал все данные из структуры, после чего передать уже для расчета.
  • Dimka Maslov © (10.03.13 21:16) [1]
    откуда вообще взялось понятие "данные динамического массива"?

    var s: MyStruct;
    value: LongInt;
    ...
    CalcCRC32(@S, sizeof(s), value)
  • Sapersky (11.03.13 00:04) [2]
    Ну там же указатель.

    По частям CRC считать можно? Если да:

    type
     MyStruct = packed record
        param1: Cardinal;
        param2: LongWord;
        param4: LongWord;
        param3: array of Char;
        end;

    CalcCRC32(@S, sizeof(s)-sizeof(Pointer), value);
    Len := Length(s.param3);
    If Len > 0 then CalcCRC32(@S.param3[0], Len * sizeof(Char), value);

  • Германн © (11.03.13 01:01) [3]

    > При передаче этой структуры в процедуру:
    > 1
    >  
    > CalcCRC32(p: pointer; nbyte: WORD; var CRCvalue: LongInt);
    >

    А зачем именно в эту процедуру передавать именно эту структуру?
  • novicmen_ (11.03.13 02:55) [4]
    Sapersky   (11.03.13 00:04) [2]

    Нет, так не получается... не совпадает полученное значение с ожиданием.
    Надо копать как сформировать буфер (массив) из этих данных...
  • novicmen_ (11.03.13 02:57) [5]
    Германн ©   (11.03.13 01:01) [3]

    > При передаче этой структуры в процедуру:
    > 1
    >  
    > CalcCRC32(p: pointer; nbyte: WORD; var CRCvalue: LongInt);
    >

    А зачем именно в эту процедуру передавать именно эту структуру?


    Проверить достоверность полученных данных.
  • Sapersky (11.03.13 03:03) [6]
    Формировать массив или считать в два приёма - по идее должно быть без разницы, если, конечно, CRCvalue в начале CalcCRC32 не сбрасывается.
  • novicmen_ (11.03.13 15:34) [7]
    Sapersky   (11.03.13 03:03) [6]
    Формировать массив или считать в два приёма - по идее должно быть без разницы, если, конечно, CRCvalue в начале CalcCRC32 не сбрасывается.


    Попробую еще раз, может тупанул где то...

    Решение найдено, вернее найдены исходники того как данные сохраняются, там не динамический, а статический массив 512 элементов, сохраняется только значимая (<>#0). В записке было не верно, случайно может быть.

    Спасибо за помощь.
 
Конференция "Основная" » Преобразование (приведение) типов. [D7, WinXP]
Есть новые Нет новых   [120329   +118][b:0][p:0.001]