大小端的转换有关问题?

不知在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???
------解决方案--------------------
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';

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值