在delphi2009下我写了下面的代码:
var
  lpStr: pAnsiChar;
  i,m:Byte;
begin
  lpStr:= GetMemory(lpStr, 3); 
  lpStr[0]:= chr($FF);
  lpStr[1]:= chr($AB);
  lpStr[2]:= #0;
  
  i:= Byte(lpStr[0]);
  k:= Byte(lpStr[1]); 
    
end;
  
运行之后, 发现i,k都成了63.
查看 ord( chr($FF) )的时候结果又是255;
这是怎么回事呢?
我看了下 超过$79的数转为AnsiChar 再转回来就都变成63了;
在delphi 7下没有这种问题。
谁知道是什么问题吗?

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      lpStr: pChar;
      i,k:Byte;
    begin
      lpStr:= GetMemory(3);
      lpStr[0]:= chr($FF);
      lpStr[1]:= chr($AB);
      lpStr[2]:= #0;  i:= Byte(lpStr[0]);
      k:= Byte(lpStr[1]);
    end;
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      lpStr: pAnsiChar;
      i,k:Byte;
    begin
      lpStr:= GetMemory(3);
      lpStr[0]:= Ansichar($FF);
      lpStr[1]:= AnsiChar($80);
      lpStr[2]:= #0;  i:= Byte(lpStr[0]);
      k:= Byte(lpStr[1]);
      ShowMessage(InttoStr(i));end;
      

  3.   

      换成 pChar是可以,但是为什么pAnsiChar就不行呢。
      我看到在System单元里面说pAnsiChar是pChar的别名,那它们应该是一样的啊。
      

  4.   

    嗯 换成AnsiChar可以了 
    谢谢啦,没分可以给,抱歉哦。
      

  5.   

    沒事。理解下 2009  的  chr  返回的 Char,
      

  6.   

    var
      lpStr: pAnsiChar;
      i,m:Byte;
    begin
      lpStr:= GetMemory(lpStr, 3);
      lpStr[0]:= #$FF;
      lpStr[1]:= #$AB;
      lpStr[2]:= #0;
     
      i:= Byte(lpStr[0]);
      k:= Byte(lpStr[1]);
       
    end;