比如说:1点钟,的1十六JZ是:30 B5,而我的代码就是把30取出,让它变成A3B0形式,可我只知道ERRO的原因,却改不了,请问有谁会呀? 

解决方案 »

  1.   

    上面说的是'1点钟'是string类型。如果是WideString,如下演示:var
      S : WideString;
      P : ^Byte;
    begin
      S := '1点钟';
      P := @S[1];
      showmessage(inttostr(SizeOf(S[1]))); //S[1]占二个字节
      showmessage(format('%.2x',[P^])); //'1'的低字节  : 31
      inc(P);
      showmessage(format('%.2x',[P^])); //'1'的高字节  : 00
    end;
      

  2.   

    上QQ了吗?,
    是这样的,发送从1-24钟点时间的十六JZ,那么1不就是:
    30 B5 吗,现在是要把这个30 B5变成A3 B0 B5的形式,
    !
      

  3.   

    现在是要把这个30 B5变成A3 B0 B5的形式,通过COM发送出去!
      

  4.   

    var
      I , J : integer;
      C : char;
      P : ^Byte;
    begin
      I := 1;
      C := '1';
      P := @I;
      for J := 0 to SizeOf(I)-1 do
         begin
         Memo1.Text := Memo1.Text + format('%.2x',[P^]);//整数1的16进制
         inc(P);
         end;
      memo1.Lines.Add('');
      P := @C;
      for J := 0 to SizeOf(I)-1 do
         begin
         Memo1.Text := Memo1.Text + format('%.2x',[P^]);//字符'1'的16进制
         inc(P);
         end;end;结果是:01000000
    31010000即不是30,更没有B5
      

  5.   

    我明白你的意思了
    你用WideString就行了
      

  6.   

    只能给你说一下原理了,不知道你在想什么,你想得到什么,不能给你写代码。const S : string = '1点钟';
    这时,S[1]就是'1',它的十六进制不是你说的[31B5]  [31B5]是两个字节!一个字符只占一个字节!const S : widestring = '1点钟';
    这时,S[1]就是'1',它的十六进制是[0031],虽然占二个字节,但也不是31B5!!!!我在上面举出了众多的代码,都是以字节为单位取它的内存并以16进制显示出来。你自己参考,自己改!
    目前没法给你写出代码!教给你方法,你自己去做!
    还是那句话:把概念搞清楚了再问问题,你自己问得也清楚,别人回答得也痛快!
    累死了!88!
      

  7.   

    唉....我再来回一个。如果用String,这样就是你要的结果:var
      S : String;
      I : integer;
      P : ^Byte;
      tempS : string;
      ResultStr : string;
    begin
      S := '1' + '点钟'; //之所以分开写,是启示你如此赋值钟点数
      P := @S[1];
      tempS :=  format('%.2x',[P^]);
      ResultStr := 'A' + Copy(tempS,1,1) + 'B' + Copy(tempS,2,1) + 'B5E3D6D3';
      ShowMessage(ResultStr);//这就是结果
    end;'B5E3D6D3'是'点钟'的内存格式,因为1-24点都是'点钟',所以直接用字串就行了!