关于通过串口接收下位机发送的含中文字符出现乱码的问题
delphi吧
全部回复
仅看楼主
level 4
Delphi世界 楼主
各位大侠,好:
碰到一个问题,当接收从下位机串口发送来的大量含中文字符的数据时,显示在memo的数据就变成了乱码,但是在调试F8的时候,接收变量显示却没有问题,这个真是蛋疼啊,求赐教。
环境:xp+delphi7+cnvcl控件
串口初始化并打开:
串口初始化:
RS1.CommName := 'COM'+Form1.ComPortTxt.text;
RS1.CommConfig.BaudRate :=StrToInt(Form1.BaudRateTxt.Text);
RS1.CommConfig.Parity :=TParity(paNone);
RS1.CommConfig.ByteSize :=TByteSize(_8);
RS1.CommConfig.StopBits :=TStopBits(_1);
RS1.StopComm;
RS1.StartComm;
串口接收
var Str :string;
begin
SetLength(Str,BufferLength);
Move(buffer^,PChar(@Str[1])^,bufferlength);
CMsg:=CMsg+Str;//这里很奇怪,CMsg正常,Str部分乱码
ReturnTxt.Lines.Add(Str);
这是断点调试应该是正常的图片
但是显示在memo控件框里的就是乱码了
下面是相应的乱码内容,每次还都不一样,例如
=============================================================
杭?
莺?低邮旨际
豕煞萦邢薰?
欢迎使
妹姘宀馐云教?
试说明如下:
1:上电后POWE
R灯常亮绿色,PS_
ON#灯常亮红色,R
eady灯亮绿色为正
=============================================================
2014年05月16日 07点05分 1
level 12
用TstringStream过渡一下:
var tmp:Tstringstream;
//前面步骤省
tmp.size:=bufferlength;
move(buffer^,tmp.bytes[0],bufferlength)
str:=tmp.datastring;
2014年05月16日 22点05分 2
谢谢大神回复,等周一再去公司试一下。
2014年05月17日 07点05分
level 4
Delphi世界 楼主
@A1Duke
move(buffer^,tmp.bytes[0],bufferlength)
运行到这里提示bytes为声明,需要怎么声明?
2014年05月19日 01点05分 3
你的stringstream create了没有啊
2014年05月19日 06点05分
level 4
Delphi世界 楼主
winxp+delphi7
如果tmp:=TStringStream.Create('');这样的话
运行move(buffer^,tmp.bytes[0],bufferlength);提示未声明bytes
2014年05月19日 08点05分 5
level 4
Delphi世界 楼主
2014年05月20日 01点05分 8
level 4
Delphi世界 楼主
@A1Duke
在串口接收函数里,Byte2String用在哪里?
RS1为TCnRS232控件。
procedure TF_Tncnx.RS1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var Str :string;
P: PChar;
S: WideString;
tmp:Tstringstream;
begin
………………………………(这里怎么写?)
end;
2014年05月20日 05点05分 9
level 12
var tmp:array of byte;
setlength(tmp,bufferlength);
move(buffer^,tmp,bufferlength);
str:=strpas(byte2string(tmp));
2014年05月20日 13点05分 10
level 8
下位机发完后加个#0,然后弄个pansichar指向你的buff也可以吧?
2014年05月21日 00点05分 11
level 1
搞定了没?我的乱码跟你差不多
2017年02月16日 07点02分 12
level 3
是不是com口线接错,接反了
2017年02月18日 10点02分 13
level 7
楼主解决了没 ,看到串口的问题就感兴趣
2017年06月08日 23点06分 14
level 8
可以的
2017年06月09日 09点06分 15
1