最后80分了:“通”的Unicode值是901A,如果我用vacomm1.writetext(#$90#$1A),则正常,用vacomm1.writetext('#$90#$1A')则是乱码我该用什么函数把“通”转换成#$90#$1A,而不是'#$90#$1A'?这样我才可以直接写:
vacomm1.writetext(xxxx('通'))。

解决方案 »

  1.   

    直接 vacomm1.writetext('通') 不行???
      

  2.   

    function Char2Unicode(S: Widestring): string;
    var
      i, len, cur: Integer;
      t, dststr: string;
    begin
      dststr := '';
      len := length(S);
      i := 1;
      while i <= len do
        begin
          cur := ord(S[i]);
          fmtstr(t, '%4.4X', [cur]);
          dststr := dststr + t;
          inc(i);
        end;
      Char2Unicode := dststr;
    end;这是我写的函数,你试试!
      

  3.   

    看看這個貼子, 可解決你的問題!http://expert.csdn.net/Expert/topic/2417/2417314.xml?temp=.3805048
      

  4.   

    function MyFunc(const AText: String): String;
    var
      ws: WideString;
    begin
      ws := AText;
      SetLength(Result, Length(ws) * 2);
      Move(ws[1], Result[1], Length(Result));
    end;
    -----------------
    你就可以:vacomm1.writetext(MyFunc('通'))了
      

  5.   

    写段简单的函数,把它交换一下就好了呀!>楼上的果然厉害,呵呵。但是我得到的"通"是1A 90,我想得到90 1A
      

  6.   

    function EncodeWideString(Value:WideString):String;
    //encode the widestring to saveable string
    //2003.03.04
    var
      I:Integer;
    begin
      Result:='';
      for I:=1 to Length(Value) do begin
        Result:=Result+IntToHex(WORD(Value[I]) shr 8,2);
        Result:=Result+IntToHex(WORD(Value[I]) and $00ff,2);
      end;
    end;function DecodeWideString(Value:String):WideString;
    //decode the string to widestring
    //2003.03.04
    var
      I:Integer;
    begin
      Result:='';
      for I:=0 to (Length(Value) div 4)-1 do begin
        Result:=Result+WChar(StrToInt('$'+Value[I*4+1]+Value[I*4+2]) shl 8
            + StrToInt('$'+Value[I*4+3]+Value[I*4+4]));
      end;
    end;
      

  7.   

    function MyFunc(const AText: String): String;
    var
      ws: WideString;
    begin
      ws := AText;
      SetLength(Result, Length(ws) * 2);
      Move(ws[1], Result[1], Length(Result));
    end;
    =============
    这个函数转出来"通"是1A 90,但是需要得到90 1A才行,怎样才能得到90 1A呢?
      

  8.   

    稍加修改,得到新的次序:
    function MyFunc(const AText: String): String;
    var
      ws: WideString;
      p: PWord;
      i: Integer;
    begin
      ws := AText;
      SetLength(Result, Length(ws) * 2);
      Move(ws[1], Result[1], Length(Result));
      p := PWord(PChar(Result));
      for i:=1 to Length(ws) do
      begin
        p^ := (p^ shr 8) or (p^ shl 8);
        Inc(p);
      end;
    end;