关于Char和String:c:char,s:string;c有数据,s:=s+c,s为什么是空的?(30分)

  • 主题发起人 主题发起人 孤云
  • 开始时间 开始时间

孤云

Unregistered / Unconfirmed
GUEST, unregistred user!
var
c:char;
s:string;
begin
s:='';
WHILE ComPort1.CharReady DO
BEGIN
C:=Comport1.GetChar;
s:=s+C;
END;
作一个接口程序
调试时C有数据(是#251),为什么s还是空的
这之间还需要进行转化?很是不懂,请各位帮帮忙
时间比较急,就不去全文检索了,请各位帮帮忙,谢谢!
 
可能C里有字符串截止标志
你可以SHOWMESSAGE看看
 
不是很懂,用SHOWMESSAGE怎么看
或者这跟16位或32位的是不是有关
 
c:=#251;
showmessage(c);

这里是看不到什么的,证明#251是不可见字符
 
谢谢!
#3 #10 #181............都是不可见字符
那怎么把它们转化成可见字符
或者直接提取#3 #8
 
用byte类型的来存接收到的字符,
再用chr还是char的转换试试(记不太起来了手头没有DELPHI)
 
function Str2HexStr(const S: string): string;
var
I: Integer;
HexStr: string;
begin
for I:= 1 to Length(S) do
begin
HexStr:= HexStr + IntToHex(Ord(S), 2) + ' ';
end;
Result:= Trim(HexStr);
end;
 
谢谢!昨晚把代码修改为
var
c:char;
s:string;
begin
s:='';
WHILE ComPort1.CharReady DO
BEGIN
C:=Comport1.GetChar;
s:=s+IntTOHex(ord(C),2);
END;
能看到数据了
但还是不太明白为什么需要这样转化,
它和十六进制有什么的联系
不要笑话我,我还很彩
要结题,那位XDJM愿意告诉我,先谢了!
xiaolin0058@163.com
 
s:=s+IntTOHex(ord(C),2);
你把字符用16进制字符串的方式输出,当然会有结果了(可见字符)
 
多人接受答案了。
 
后退
顶部