各位老大,小弟有个问题,请问如何在delphi中将将单字节数字写入双字内并且低位写在首字节,例如:682,将其转化为16进制数0x021A,我要建立个双字,将682写入,其格式为0x1A0x020x000x00,请问怎么用delphi实现,请各位老大指教!!!

解决方案 »

  1.   

    直接赋值给DWORD类型变量就行了,不需要处理的。在Intel的CPU中,多字节整数就是按低字节在前、高字节在后的顺序存放的。
    (另外,682的十六进制应该是$02AA,不是$021A)
      

  2.   

    难道你是要这?
    var
      I: Word;
      J: DWORD;
    begin
      J := 0;
      I := 682;
      PByte(Integer(@J) + 3)^ := PByte(@I)^;
      PByte(Integer(@J) + 2)^ := PByte(Integer(@I) + 1)^;
    end;
      

  3.   

    不好意思,我可能问题没有说清楚,现在是这样我按madyak的程序用stringstream()传出去,接收后得到的是ASCII的值,比如88,传过去解出来时X,而不是88的16进制数,请问该怎么做啊,最好给出操作代码,谢谢!!!!
      

  4.   

    转换16进制只有当字符串处理时才会有意义
    IntToHex是用来把整数转换为16进制字符串的.
      

  5.   

    madyak,谢谢您的讲解,你的意思我明白,现在的问题是我怎么写才能让接收到的是88而不是x,请您帮忙,谢谢!
      

  6.   

    InttoHex(ord('X'),2);
    是不是要这?
      

  7.   

    不是那个意思,这个意思,我传的是一个整形数组,然后传出去,对方接收后把数解析出来,现在我用stringstream()传出去,对方收到的是字符型,而不是整形,怎么才能够对方接收到的是整形呢?
      

  8.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Mem: TMemoryStream;
      i, j: DWORD;
    begin
      i := 1000;
      j := 0;
      Mem := TMemoryStream.Create;
      Mem.Write(i, SizeOf(DWORD));
      Mem.Position := 0;
      Mem.Read(j, SizeOf(DWORD));
      Mem.Free;
      ShowMessage(IntToStr(j));end;
      

  9.   

    借位置存两个涵数
    implementation
    uses
          StrUtils;{$R *.dfm}
    function   ConvertHexstrToDouble(s:string):Double;
    var
        i:integer;
        pConvert:PChar;
    begin
        pConvert:=PChar(@Result);
        ZeroMemory(pConvert,SizeOf(Result));
        for   i:=0   to   Round(length(s)/3)-1   do
            begin
            if(i>=SizeOf(Result))then
                break;
            pConvert[i]:=Chr(StrToInt('$'+LeftStr(PChar(@PChar(s)[i*3]),2)));
            end;
    end;
    function ConvertDoubleToHexstr(d:Double):string;
    var
        i:Integer;
        pConvert:PChar;
    begin
        pConvert:=PChar(@d);
        Result := '';
        for i := 0 to SizeOf(d) - 1 do
            begin
            Result := Result + IntToHex(Integer(pConvert[i]),2)+' ';
            end;
    end;