不知在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)

解决方案 »

  1.   

    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;
      

  2.   


    //这段代码是直接根据你的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';
    题外话,楼主用这个函数转换,其实不是很得体
      

  3.   

    //Delphi 2010
    var
      S : UnicodeString;
    begin
      S := '456';  //这句执行后, S所指向的内存 本来就是 34 00 35 00 36 00 不知道这个结果是否是你想要的哦
      

  4.   

    解决掉了,在原有的函数之上或一下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;