linux下lazarus2.2读写2进制文件

lazarus出新版本了,代码编辑器linux下还是不支持中文输入,采用别人方案先凑合吧国产深度操作系统Deepin平台+Lazarus实现Linux环境下的APP开发...- Community - Deepin Technology

安装新版2.2.0,删除~/.lazarus
启动就是新版,否则启动起来还是老的配置
依次点击[Tools]-->[Options] 然后弹出选项菜单,点击[Environment]下的[General],选择右侧的[Language]下的[Chinese],然后点击右下方的[OK]键即可修改成功!
重启进入就是中文界面
包管理器直接可以搜到dock相关的2个,重启就是一体化ide,打开工程查看器,拖标题栏到边上,就比较完善了
打开工具-》选项-》编辑器-》显示-》颜色 背景色更改为豆沙绿 (85 90 205)rgb(202 234 206)
编辑器-》显示-》右边界 把80更改为120
代码工具-》断行 80更改为120

然后差不多可以用了,下面是主要的读写代码

查找代码

procedure TForm1.checkBtnClick(Sender: TObject);
var
  f: file;
  i, len, k: integer;
  buf: array[0..7] of byte;
  s: string;
  // i=10550247 $eb
begin
  target := 0;
  if FileExists(fileEdit.Text) then
  begin
    AssignFile(f, fileEdit.Text);
    Reset(f, 1);
    EventLog1.Debug('change file=%s size=%d', [fileEdit.Text, FileSize(f)]);
    len := 0;
    //p:=10550240;
    k := 0;
    seek(f, k);
    for i := 0 to 7 do
    begin
      buf[i] := 0;
    end;
    repeat
      BlockRead(f, buf, sizeof(byte) * 8, len);
      if (len > 0) then
      begin
        for i := 0 to 7 do
        begin
          if (buf[i] = sampleBook[0]) then
          begin
            k := k + i;
            if i > 0 then
            begin
              seek(f, k);
              BlockRead(f, buf, sizeof(byte) * 8, len);
            end;
            break;
          end;
        end;
        if checkbuf(buf) then
        begin
          s := '';
          for i := 0 to high(buf) do
          begin
            s := s + format('%.2x', [buf[i]]);
          end;
          EventLog1.Debug('index=%d s=%s', [k, s]);
          target := k + 7;
          break;
        end;
      end;
      k := k + len;
    until ((len = 0) or (k > 10600000));
    CloseFile(f);
    if buf[7] = $74 then  radiobutton1.Checked := True
    else
      radiobutton2.Checked := True;
  end;
  ShowMessage('完成检查');
end;    

找到特定字节值更改写入

procedure TForm1.changeBtnClick(Sender: TObject);
var
  f: file;
  buf: array[0..7] of byte;
begin
  if FileExists(fileEdit.Text) then
  begin
    AssignFile(f, fileEdit.Text);
    Reset(f, 1);
    EventLog1.Debug('change file=%s size=%d target=%d',
      [fileEdit.Text, FileSize(f), target]);
    seek(f, target);
    if radiobutton1.Checked then
    begin
      buf[7] := $eb;
      radiobutton2.Checked := True;
    end
    else
    begin
      buf[7] := $74;
      radiobutton1.Checked := True;
    end;
    BlockWrite(f, buf[7], 1);
    CloseFile(f);
    ShowMessage('完成改变');
  end;
end;  

下面是比较目标字节数组

const
  sampleBook: array[0..7] of byte = ($E8, $6B, 0, 0, 0, $84, $c0, $74);  

function checkbuf(bytes: array of byte): boolean;
var
  i, j: integer;
begin
  j := 0;
  if Length(bytes) >= 7 then
  begin
    for i := 0 to 6 do
    begin
      if bytes[i] = sampleBook[i] then
      begin
        j := j + 1;
      end
      else
        break;
    end;

  end;
  checkbuf := (j = 7);
end;   

你可能感兴趣的:(lazarus,linux,lazarus)