最后80分了:“通”的Unicode值是901A,如果我用vacomm1.writetext(#$90#$1A),则正常,用vacomm1.writetext('#$90#$1A')则是乱码我该用什么函数把“通”转换成#$90#$1A,而不是'#$90#$1A'?这样我才可以直接写:
vacomm1.writetext(xxxx('通'))。
vacomm1.writetext(xxxx('通'))。
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;这是我写的函数,你试试!
var
ws: WideString;
begin
ws := AText;
SetLength(Result, Length(ws) * 2);
Move(ws[1], Result[1], Length(Result));
end;
-----------------
你就可以:vacomm1.writetext(MyFunc('通'))了
//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;
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呢?
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;