大家好。
在DELPHI中,16进制的数据怎么表示?是不是0X12类似的?
如何让一个PCHAR类型的变量赋上16进制的数据,比如:
A:PCHAR;
A:=[0x10,0x12,0x11,0x55,.......,0x88];
就是让PCHAR里面的内容是16进制的整数?
可不可以?
多谢大家了。

解决方案 »

  1.   

    16进制你可以定义成byte/word类型
    var
     p:pchar;
     A:array[0..1]of byte;
    begin
     a[0]:=$01;
     a[1]:=$DF;
     p:=@a;//p指针指向数组a
    end;
      

  2.   

    0x是C语言的表示,在Delphi中用$来表示16进制数
      

  3.   

    可以这样:procedure TForm1.Button1Click(Sender: TObject);
    const
      A: PChar = #$10 + #$12 + #$11 + #$55 + ... + #$88;
    begin
      // use A
    end;$ 代表十六进制 , # 代表字符 ,这样生成的 A 在内存中就是:10 12 11 55 ... 88
      

  4.   

    TO  torble(阿裕) :
     那样赋值只能赋给静态,如果是变量呢?如:b:=#$11;A:=A+b;
    这样就不行。TO  wzrlover(流光逝水):
      p:=@a;//p指针指向数组a 这样好像不行,因为单步跟踪进去,发现在P
    里面的值是一些ASC乱码,不是想要的$01、$DF。谢谢两位,不过大家还有什么方法吗?
      

  5.   

    var
      S:String;
      i:integer;
      P:PChar;
    begin
      i:=$F11;
      S:=IntToHex(i,8);
      while S[1]='0' do
        Delete(S,1,1);
      P:=@S[1];//P就指向这个十六进制串的开始
    end;
      

  6.   

    A[i] := chr($14);or 
    pbyte(a+i)^ := $14;
      

  7.   

    16进制 只是显示的问题
    安整数赋值即可。
    再调用IntToHex
      

  8.   

    动态的例子:procedure TForm1.Button1Click(Sender: TObject);
    var
      A: PChar;
      B: string;
    begin
      B := #$39#$40#$41#$42#$0; // 内存布局: 39 40 41 42 00
      A := @B[1];
      ShowMessage(A);
      B := #$41#$42#$43#$44#$0; // 内存布局: 41 42 43 44 00
      A := @B[1];
      ShowMessage(A);
      B := #$42#$43#$44 + B;  // 内存布局: 42 43 44 41 42 43 44 00
      A := @B[1];
      ShowMessage(A);
    end;由于 string 的内存分配是编译器自动管理的,所以我们不用操心内存的泄漏--爽。 :(然后通过 PChar 变量 A 访问这些内容。需要说明的是:由于地址分配是由编译器处理的,我们无法控制,上面每一次赋值的结果都要用到 A := @B[1] ,因为每一次 B 的地址都不一样。