不知在delphi中是怎样的转换,如456用EncodeUniCode转成USC2就是0034 0035 0036的小端方式,而我现在要大端方式即3400 3500 3600的方式,不知怎样的转,delphi中没有现成的函数样的。网上只能查到C的转换方式,也看不懂,不知是对与错,但也不知怎样转为delphi的方式。C的方式如下:
void convertToLittleEndian(unsigned int *data)
{
*data = ((*data & 0xff000000) >> 24)
| ((*data & 0x00ff0000) >> 8)
| ((*data & 0x0000ff00) << 8)
| ((*data & 0x000000ff) << 24)
}
------解决方案--------------------
乘256???
------解决方案--------------------
------解决方案--------------------
{
*data = ((*data & 0xff000000) >> 24)
| ((*data & 0x00ff0000) >> 8)
| ((*data & 0x0000ff00) << 8)
| ((*data & 0x000000ff) << 24)
}
------解决方案--------------------
乘256???
------解决方案--------------------
procedure convertToLittleEndian(var i32:Longword)
var
p,p2:pbyte;
b:byte;
begin
p:=pbyte(@i32);
p2:=p; inc(p2,4);
b:=p^; p^:=p2^; p2^:=b;
inc(p); p2:=p; inc(p2);
b:=p^; p^:=p2^; p2^:=b;
end;
------解决方案--------------------
//这段代码是直接根据你的C代码翻译的
procedure convertToLittleEndian(var int : DWORD);
begin
int := ((int and $ff000000) SHR 24)
or ((int and $00ff0000) SHR 8)
or ((int and $0000ff00) SHL 8)
or ((int and $000000ff) SHL 24);
end;
//这个代码就不说了,上面的函数搞半天,其实就是一行指令.
function convertToLittleEndian2(dw : DWORD) : DWORD;
asm
BSWAP EAX
end;
procedure TForm1.FormCreate(Sender: TObject);
var
n1 , n2 : DWORD;
begin
n1 := $12345678;
n2 := $12345678;
convertToLittleEndian(n1);
n2 := convertToLittleEndian2(n2);
if n1=n2 then
Caption := 'OK';