在互联网开发中,经常需要把一个32位整形数字(或者64位)转换成字节数据。例如在微信公众号中消息加密解密就需要把消息的长度(一个无符号32位数)转换成字节类型,转换成字节后,排列方式有两种,一种是低字节在前高字节在后(比较常用的),第二种就是高字节在前,低字节在后。下面分别举例说明:
比如有一个32位的整型数:$12345678(16进制)
转换成字节流后,有4个字节。
低字节在前高字节在后:$78 $56 $34 $12
高字节在前低字节在后:$12 $34 $56 $78
使用 move 实现低字节在前高字节在后方式如下:
procedure TForm_PUB_Menu.Button1Click(Sender: TObject);
var
i : DWord;
B : TBytes; //动态字节数组
C : array[0..3] of Byte; //静态数组,长度固定
begin
i := $12345678;
SetLength(B,Sizeof(i)); //需要预先设置长度,保留空间
move(i,B[0],Sizeof(i)); //转成字节,注意必须是B[0],此处不能直接使用B
move(i,C,Sizeof(i)); //静态数组直接使用,无需设置长度,使用变量名即可,无需下标
//返回结果:
// B[0] := $78
// B[1] := $56
// B[2] := $34
// B[3] := $12
// C[0] := $78
// C[1] := $56
// C[2] := $34
// C[3] := $12
end;
使用 move 实现高字节在前低字节在后方式是使用上面的函数先生成好字节流,然后再进行顺序交换即可。