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