串口接受字符串数据送入memo,怎么处理其中的汉字?(50分)

  • 主题发起人 主题发起人 jj8431
  • 开始时间 开始时间
J

jj8431

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用cport控件,从串口接受字符串数据,然后送入memo显示,因为是一个字节一个字节接收的,发现没法还原其中的汉字,请问该怎么处理呢? 我是新手,也刚刚注册,总共只有200分,怕以后还有问题,不敢一次都用了,所以分有点少,各位老师就算学个雷锋吧:)

我现在的代码是这样的:
ComPort1.Read(i,1);
Memo1.Text:=Memo1.Text+chr(i);
因为是按byte接收来的,所以显示出来只有英文字符,我曾经试着改成这样:
begin
...
ComPort1.Read(i,1);
InStr[j]:=i;
end; // 接收用的循环,j是循环变量
Memo1.Text := InStr; //全部接收到InStr字符串变量后再放入memo
但是这样编译通不过,因为数据类型不符。改成
ComPort1.Read(InStr[j],1);
也不行,编译不报错,但是一运行就出错。

请问高手,这个问题该怎么解决呢?
顺带的,我现在有了汉字的内码,比如一个integer类型的数据i的值是一个汉字的内码,比如 $b0a1(啊), 我现在想要把这个字加到一个现有的字符串 Str里面,怎么加呢?ascii的话 Str:=Str+Chr(i) 就行了,可是汉字怎么办啊?
 
在线等啊,没人回帖阿[:(]
 
建议,发送前先编码,收到后再解码....
 
回jonnyzheng: 发送的数据不能改阿,再说,即便编码了,还是一样啊。我觉得问题可以归结为怎么把2个byte类的数据(汉字内码)转换成一个汉字的string的问题,哪位高手知道该怎么做啊?
 
比你你取到兩個byte類型號的數據分別是165和180則:
Edit1.Text:= Chr(165)+Chr(180);
//結果Edit1.Text="打"
//其中165和180組合是漢字"打"的內碼
//轉換時注意先對每個字節進行範圍判斷,可參考下面:
Gb2312 簡體漢字的高字節範圍: 0xa1 <= Gb2312.High <= 0xf7
Gb2312 簡體漢字的低字節範圍: 0xa1 <= Gb2312.Low <= 0xfe
Big5 繁體漢字的高字節範圍: 0xa1 <= Big5.High <= 0xf9
Big5繁體漢字的低字節範圍: 0x40 <= Big5.Low <= 0xfe

//記得給分哦,
 
djrj:
如果
Edit1.Text:= Chr(165)+Chr(180);
//結果Edit1.Text="打"

那我
ComPort1.Read(i,1);
Memo1.Text:=Memo1.Text+chr(i);
这个程序为什么不行呢??? 是不是必须要区码和位码同时操作啊?比如改成
ComPort1.Read(i,1);
ComPort1.Read(j,1);
Memo1.Text:=Memo1.Text+chr(i)+chr(j);
这样吗?
 
接受答案了.
 
但是这样编译通不过,因为数据类型不符
>>是哪一行出錯啊?一般讀寫操作的都用緩沖區,你的ComPort1.Read(i,1)裏的i的數據類型與Read的參數定義的數據類型是不是一樣呢,試試這樣:
var
Buf: array[0..0] of Char;
begin
ComPort1.Read(Buf,1)

--要判斷是不是漢字當然要兩個字節一起取出來了再處理啊
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部