Здравствуйте, Alex.Che, Вы писали:
AC>ты мужественно пытаешься преодолеть собственные косяки в коде.
AC>показывай как читаешь и как пишешь.
Ошибся немножко, вот правильное трактование:
% SWAP и сохранение в переменную TimeW1: file (FC 41 22 C5) %
А вот как пишу:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
function Swap32(Value: LongWord): LongWord;
public
{ Public declarations }
end;
var
Form1: TForm1;
F,F1: File;
NumRead, NumWrite: Integer;
TimeW0,TimeW1,TimeW2: LongWord;
Offset: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(F, 'C:\LOG001');
{$I-}
Reset(F, 1);
{$I+}
if IOResult<>0 then Halt;
Offset := StrToInt(Edit1.Text);
Seek(F, Offset);
BlockRead(F, TimeW0, 4, NumRead);
TimeW1 := Swap32(TimeW0);
Label1.Caption := IntToStr(TimeW0);
Label2.Caption := IntToStr(TimeW1);
CloseFile(F);
AssignFile(F1, 'C:\LOG001_rewrite');
{$I-}
Rewrite(F1, 1);
{$I+}
Seek(F1, 0);
BlockWrite(F1, TimeW0, 4, NumWrite);
Seek(F1, 16);
BlockWrite(F1, TimeW1, 4, NumWrite);
Seek(F1, 32);
BlockWrite(F1, TimeW2, 4, NumWrite);
CloseFile(F1);
end;
function TForm1.Swap32(Value: LongWord): LongWord;
var
B: Byte; // временный байт
WordArr: array[0..3] of byte; // массив из 4-х байт
W: LongWord absolute WordArr; // 32 битное Word с таким же начальным адресом в памяти как и массив WordArr
begin
W := Value; // присваиваем Word-у значение Word в котором нужно переставить местами байты
B := WordArr[0]; // присваиваем временному байту значение [0] байта массива (потому что оно затрется)
WordArr[0] := WordArr[1]; // присваиваем [0] байту массива значение [1] байта
WordArr[1] := B; // присваиваем [1] байту массива значение временного байта
B := WordArr[2]; // аналогично...
WordArr[2] := WordArr[3];
WordArr[3] := B;
result := W;
end;
end.
По умолчанию Offset := 4;