Einzelnen Beitrag anzeigen

Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#12

Re: VTOC/Inhaltsverzeichnis einer CD/DVD auslesen

  Alt 16. Okt 2009, 00:19
Ich muss erneut um eure Hilfe bitten, weil ich momentan einen Knoten im Hirn habe und nicht weiterkomme .

Ich hab das Programm etwas geändert, und zwar habe ich ein Record definiert, in dem die Daten ankommen:
Delphi-Quellcode:
var PVD : record
        VolDescType : byte;
        StandardID : array[2..6] of char;
        VolDescVer : byte;
        X1 : byte;
        SystemID : array[9..40] of char;
        VolID : array[41..72] of char;
        X2 : array[73..80] of byte;
        VolSpaceSize : array[81..88] of byte;
        X3 : array[89..120] of byte;
        VolSetSize : array[121..124] of byte;
        VolSequNr : array[125..128] of byte;
        LogBlockSize : array[129..132] of byte;
        PathTableSize : array[133..140] of byte;
        TypeLPathTab : array[141..144] of byte;
        OptTypeLPathTab: array[145..148] of byte;
        TypeMPathTab : array[149..152] of byte;
        OptTypeMPathTab: array[153..156] of byte;
        DirRecordRoot : array[157..190] of char;
        VolumeSetID : array[191..318] of char;
        PublisherID : array[319..446] of char;
        DataPrepID : array[447..574] of char;
        AppID : array[575..702] of char;
        CopyFileID : array[703..739] of char;
        AbstractFileID : array[740..776] of char;
        BibFileID : array[777..813] of char;
        VolCreation : array[814..830] of char;
        VolModDate : array[831..847] of char;
        VolExpirDate : array[848..864] of char;
        VolEffectDate : array[865..881] of char;
        FilStructVer : byte;
        X4 : byte;
        AppUse : array[884..1395] of char;
        X5 : array[1396..2048] of byte;
      end;
Um die Daten dann von dem Pointer Buf auf das Record zu übertragen, habe ich die Methode ReadBtnClick so abgeändert:
Delphi-Quellcode:
if fDrives.Items[DriveCombo.ItemIndex].DeviceReader.ReadData(16, 1, Buf, BufLen) then
begin
     Move(Buf^, PVD, SizeOf(PVD));
end;
Das landet auch alles schön in dem Record. Nur habe ich Schwierigkeiten, die numerischen Felder richtig zu verarbeiten. Konkret geht's mir um die Felder Volume Space Size, Volume Set Size usw. Laut Spec sind diese Felder als Both-byte orders geschrieben:
Zitat:
For example, the decimal number 305419896 has (12 34 56 78 ) as its hexadecimal representation and is recorded as (78 56 34 12 12 34 56 78 ).
Hat jemand eine gute Idee, wie ich das auf einfachem (und verständlichem ) Weg in einen Integer umrechnen kann? In meinem DOS-Programm damals habe ich das ebenfalls mit einem Record gemacht, aber da wurden nur die String-Felder weiterverarbeitet (die numerischen wurden nicht benötigt).

MfG Dalai
  Mit Zitat antworten Zitat