Autor Téma: Neočekávaný výstup move. Record vs array.  (Přečteno 187 krát)

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 262
  • Karma: 0
    • Verze Delphi: 7
Neočekávaný výstup move. Record vs array.
« kdy: 16-07-2018, 11:43:50 »
Nic. Chybu jsem našel.
« Poslední změna: 16-07-2018, 11:58:48 od vangog »

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 533
  • Karma: 36
    • Verze Delphi: 10.2
Re:Neočekávaný výstup move. Record vs array.
« Odpověď #1 kdy: 16-07-2018, 11:55:32 »
Chtělo by to používat "packed record".

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 262
  • Karma: 0
    • Verze Delphi: 7
Re:Neočekávaný výstup move. Record vs array.
« Odpověď #2 kdy: 16-07-2018, 12:35:38 »
Kód: Delphi [Vybrat]
  1. HEADER_META: Array[0..DIO_META_size-1] of Byte;
  2.     VAR_META: record
  3.       itemsCount: LongWord;
  4.       sectionsListIndex: Word;
  5.       sectionsLastBeginIndex: Int64;
  6.       sorted:        Byte;
  7.       SectionsCount: Byte;
  8.       classesCount:  Byte;
  9.       itemDelimiter:   Byte;
  10.       delimitersCount: Byte;
  11.       extMaxLen:       Byte;
  12.       lastOffsetInt64: int64;
  13.     end;
  14.  

Iniciace:
Kód: Delphi [Vybrat]
  1.   with VAR_META do
  2.       begin
  3.         itemsCount := 1;
  4.         sectionsListIndex := 2;
  5.         sectionsLastBeginIndex := 3;
  6.         sorted := 4;
  7.         SectionsCount := 5;
  8.         classesCount := 6;
  9.         itemDelimiter := 7;
  10.         delimitersCount := 8;
  11.         extMaxLen := 9;
  12.         SectionsCount := 10;
  13.         lastOffsetInt64 := 11;
  14.      end;
  15.  

Kód: Delphi [Vybrat]
  1. Const DIO_META_size = 28;
  2.  

Výstupy:
VAR_META :
Kód: Delphi [Vybrat]
  1. (4, 2, 8, 1, 1, 1, 1, 1, 1, 8)
META_HEADER
(4, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0)

Kopíruji:
Kód: Delphi [Vybrat]
  1. move(VAR_META, HEADER_META, DIO_META_size);

Proč mi tam ujely ty nuly? Měly by být na konci.

Očekávám:
(4, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8, 0, 0, 0, 0, 0, 0, 0)

A SizeOf(VAR_META) mi dává 32 byte... Ovšem ať počítám jak chci k 32 se nemohu dopočítat. Vidí snad místo Wordu LongWord?

Přece:
4
2
8
1
1
1
1
1
1
8
Sum: 28

2x8byte + 4 byte + 2 byte + 6*1 byte.
« Poslední změna: 16-07-2018, 12:46:59 od vangog »

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 262
  • Karma: 0
    • Verze Delphi: 7
Re:Neočekávaný výstup move. Record vs array.
« Odpověď #3 kdy: 16-07-2018, 12:56:53 »
Chtělo by to používat "packed record".

Citace
Using packed slows data access and, in the case of a character array, affects type compatibility (for more information, see Memory management).

Mě jde o rychlý přístup.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 533
  • Karma: 36
    • Verze Delphi: 10.2
Re:Neočekávaný výstup move. Record vs array.
« Odpověď #4 kdy: 16-07-2018, 13:23:03 »
Bez "packed" ale budou pole toho recordu proložená nevyužitými bajty, což je pro move poněkud problém.

Offline vangog

  • Hrdina
  • ****
  • Příspěvků: 262
  • Karma: 0
    • Verze Delphi: 7
Re:Neočekávaný výstup move. Record vs array.
« Odpověď #5 kdy: 16-07-2018, 13:27:37 »
Bez "packed" ale budou pole toho recordu proložená nevyužitými bajty, což je pro move poněkud problém.

Tak jo, vzal jsem tě za slovo. Teď už je to správně.

(4, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 8, 0, 0, 0, 0, 0, 0, 0)

U těch META informací stejně o nic nejde.

Díky

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: