增量十六进制字符串

use*_*899 2 delphi

我正在尝试增加像这样的十六进制字符串:

#$67#$1c#$87#$b1;
#$67#$1c#$87#$b2;
#$67#$1c#$87#$b3;

这是我的程序:

var test : array [0..3] of char; intSequence : cardinal;

Sequence := #$67#$1c#$87#$b1;

procedure IncSequence;
begin
  move(Sequence[1],intSequence,SizeOF(Sequence));
  inc(intSequence);
  move(intSequence,Sequence[1],SizeOf(test));
end;
Run Code Online (Sandbox Code Playgroud)

这个过程只有第二个字节递增.结果是:

#$67#$1D#$87#$B1  
#$67#$1E#$87#$B1 
#$67#$1F#$87#$B1 

谢谢

All*_*uer 7

您也可以通过创建"变体记录"并使用Inc()来完成此操作;

type
  testrec = record
    case Byte of
      0: (data: array[0..3] of AnsiChar);
      1: (intSequence: Integer);
  end;
var
  Sequence: testrec;
begin
  Sequence.data = #$b1#$87#$1c#$67; // reversed because of "endian-ness"
  Inc(Sequence.intSequence);
end;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,数据和intSequence字段在内存中相互"叠加",因此对一个字段的任何写入将立即反映在另一个字段中.