我是从vc转过来的,在vc中位操作很方便,char ch = 'a'; ch |= 0x80; 不知道在delphi中怎样表示?

解决方案 »

  1.   

    char(ord(ch) or 0x80)或者使用一个pByte指针。
      

  2.   

    无所谓方便不方便。各种语言各有特色吧。在C++里象楼主说的那样可以隐式地转换了类型。但下面这样的代码,又显得C++不“方便”了:var
      P : ^Byte;
      I : LongInt;
    begin
      I := 323232;
      P := @I;   //在Pascal里可以直接把不同类型的对象地址赋给指针
    end;
      char *p;
      int i = 232323;
      (int *)p = &i; //在C++里却需要强制转换
      

  3.   

    至少C++Builder里是这样。VC不知道了。  ^_^偏题了,楼主不要生气。
      

  4.   

    说点正题:var
      C : Char;
      P : ^Byte;
    begin
      C := 'a';
      //可以这样:
      C := Char(Byte(C) or $80);
      //也可以这样:(一楼说过)
      P := @C;
      P^ := P^ or $80;
      //还可以象一楼那样,不过要把0x80按Delphi的表示$80
    end;
      

  5.   

    //蹭分
    var
      ch: Char;
    begin
      ch := 'a';
      Byte(ch) := Byte(ch) or $80;
    end;
      

  6.   

    对不起,我是因为刚开始学delphi,用的不熟,说话有冒犯的还请谅解。
    麻烦哪位能不能帮我转一下下面的vc程序,谢谢void CodePswd(char *szSrc,char *szDest)
    {
      unsigned int i;
      for(i=0; i<strlen(szSrc)*2;i=i+2 )
        {
          szDest[i] = 0xb0+i;
          szDest[i+1] = szSrc[i/2]|0x80;
        }
      szDest[i] = 0x00; 
    }
      

  7.   

    procedure CodePswd(szSrc: PChar; szDest: PChar);
    var
      I: Longword;
    begin
      I := 0;
      while I < StrLen(szSrc) * 2 do
      begin
        Byte(szDest[i]) := $b0 + I;
        Byte(szDest[i + 1]) := Byte(szSrc[i div 2]) or $80;
        Inc(I, 2);
      end;
      szDest[i] := #00;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      vBuffer: array[0..255] of Char;
    begin
      CodePswd('Zswang 路过', vBuffer);
      Text := vBuffer;
    end;
      

  8.   

    我遇到的DELPHI唯一不方便的地方是做Unicode程序困难。