我對位元組陣列和大/小端陣列不是很熟悉,但我需要將一個整數值反向寫入位元組陣列,我不知道如何在 Delphi 代碼中執行此操作。C# 有 BitConverter.Reverse methong,這要容易得多,在 Delphi 中是否有任何等價物?到目前為止,這是我的代碼:
x := 1500977838953;
setLength(byteArray, 8);
Move(x, byteArray[2], SizeOf(x));
showMessage(ByteToHex(byteArray));
ByteToHex 是一種回傳十六進制字串的方法,因此如果位元組順序正確,我可以讀取它們。我得到的結果是:0000693B40795D01但我需要它:00-00-01-5D-79-40-3B-69
我有什么想法可以實作這一目標嗎?
編輯:
function ByteToHex(b: array of byte): String;
const HexSymbols = '0123456789ABCDEF';
var i: integer;
begin
SetLength(Result, 2*Length(b));
for i := 0 to Length(b)-1 do begin
Result[1 2*i 0] := HexSymbols[1 b[i] shr 4];
Result[1 2*i 1] := HexSymbols[1 b[i] and $0F];
end;
end;
uj5u.com熱心網友回復:
以下是如何使用ReverseBytes()程序的示例:
program Project20;
{$APPTYPE CONSOLE}
uses
System.SysUtils;
procedure ReverseBytes(Source, Dest: Pointer; Size: Integer);
begin
Dest := PByte(NativeUInt(Dest) Size - 1);
while (Size > 0) do
begin
PByte(Dest)^ := PByte(Source)^;
Inc(PByte(Source));
Dec(PByte(Dest));
Dec(Size);
end;
end;
var x,y : Int64;
begin
x := 1500977838953;
WriteLn(x);
ReverseBytes(Addr(x),Addr(y),SizeOf(x)); // Or ReverseBytes(@x,@y,SizeOf(x));
WriteLn(IntToHex(x));
WriteLn(IntToHex(y));
ReadLn;
end.
輸出:
1500977838953
0000015D79403B69
693B40795D010000
要獲取變數的地址,請使用Addr()函式或@運算子。結果是一個 64 位整數,所有位元組都按相反順序排列,如輸出所示。
還有其他方法可以交換變數的位元組順序。bswap例如搜索。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315601.html
