大小端的转换问题?急!

youisbestbag 2013-10-24 10:13:15
不知在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)
}
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
youisbestbag 2013-10-24
  • 打赏
  • 举报
回复
解决掉了,在原有的函数之上或一下j k的位置就可以大小转换了,谢谢大家! function StrtoUnicode(Str:string):string; var s:string; i,j,k:Integer; a:array [1..1000] of Char; begin s:=''; StringToWideChar(Str,@(a[1]),500); i:=1; while ((a[i]<>#0) or (a[i+1]<>#0)) do begin k:=Integer(a[i]); //如果为大端这里为K,如果为小端这里为J j:=Integer(a[i+1]); //如果为大端这里为J,如果为小端这里为K s:=s+copy(Format('%X',[k*$100+j+$10000]),2,4); i:=i+2; end; Result:=s; end;
蓝色光芒 2013-10-24
  • 打赏
  • 举报
回复
//Delphi 2010 var S : UnicodeString; begin S := '456'; //这句执行后, S所指向的内存 本来就是 34 00 35 00 36 00 不知道这个结果是否是你想要的哦
youisbestbag 2013-10-24
  • 打赏
  • 举报
回复
那有什么好的转换方式吗,因为关于这个C的也只是网上找的,也没有试过,只是人云亦云,我附只是想把我要的东西表达的意思更清楚些
蓝色光芒 2013-10-24
  • 打赏
  • 举报
回复

//这段代码是直接根据你的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';
题外话,楼主用这个函数转换,其实不是很得体
haitao 2013-10-24
  • 打赏
  • 举报
回复
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;
zbdzjx 2013-10-24
  • 打赏
  • 举报
回复
乘256???

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧