有4個字節類型的值,用移位或邏輯運算符怎么合成一個整數?
比如 $FFEEDDCC。
高
$FF
$EE
$DD
$CC
低
//方法 1: 共用內存procedure TForm1.Button1Click(Sender: TObject);
var
bf: record b1,b2,b3,b4: Byte end;
i: Integer absolute bf;
begin
bf.b1 := $CC;
bf.b2 := $DD;
bf.b3 := $EE;
bf.b4 := $FF;
ShowMessageFmt('%x', [i]);
//FFEEDDCC
end;
//方法 2: 位運算procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
begin
i := $CC or ($DD shl 8) or ($EE shl 16) or ($FF shl 24);//不用括號也可
ShowMessageFmt('%x', [i]);
//FFEEDDCC
end;
//方法 3: 使用函數procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
begin
i := MakeLong(MakeWord($CC,$DD),
MakeWord($EE,$FF));
ShowMessageFmt('%x', [i]);
//FFEEDDCCend;
//方法 4: 從靜態數組...procedure TForm1.Button4Click(Sender: TObject);
var
bs: array[0..3] of Byte;
P: PInteger;
begin
bs[0] := $CC;
bs[1] := $DD;
bs[2] := $EE;
bs[3] := $FF;
P := @bs;
ShowMessageFmt('%x', [P^]);
//FFEEDDCC
end;
//方法 5: 從動態數組...procedure TForm1.Button5Click(Sender: TObject);
var
bs: array of Byte;
P: PInteger;
begin
SetLength(bs, 4);
bs[0] := $CC;
bs[1] := $DD;
bs[2] := $EE;
bs[3] := $FF;
P := @bs[0];
ShowMessageFmt('%x', [P^]);
//FFEEDDC
Cend;
------------------------------------------------------------------------------- 1.可以直接Copymemory或者Move 2.可以用變體類型的結構體. type TWordOfInt = array[0..2-1] of WORD; TByteOfInt = array[0..4-1] of Byte; TIntRec = packed record //定義一個輔助類型,這樣轉換非常快,而且方便 case Integer of 0: (IntValue: Integer); 1: (Low, High: Word); 2: (Words: TWordOfInt); 3: (Bytes: TByteOfInt); end; //方法一,借助TIntRec,來轉換 var Int : Integer; Bytes : TByteOfInt; begin int := 100; Bytes := TIntRec(int).Bytes;//integer轉字節數組 Int := TIntRec(Bytes).IntValue; //Byte數組轉Integer end; //方法二, 直接用TIntRec,不轉換.根本不耗費一點點CPU的時間 var value : TIntRec; begin value.IntValue := 100; //看成Integer //下面是看成Byte數組用 value.Bytes[0] := 1; value.Bytes[1] := 1; value.Bytes[2] := 1; value.Bytes[3] := 1; end; |