接收已经搞定了。 procedure Tfcomm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var i:integer; ModemSt:DWORD; recedata:Pchar;//字符串都是指针类型,包括pchar和string begin viewstring:='COM受到的字符:'; //接受到的是字符串 getmem(recedata,bufferlength); if sendtype then //sendtype:true; 发送全部字符,false:挨个发送 begin move(buffer^,ReceData,bufferlength);//Pchar已经是指针类型的,不需要使用任何指针 for i:=0 to bufferlength-1 do begin memo1.Lines.Add(inttostr(i)+' 内容:'+string(recedata[i])); viewstring:=viewstring+string(recedata[i]); end; end else //挨个接收字符串 begin recedata:=buffer; viewstring:=viewstring+pchar(recedata); end; of an integer. memo1.lines.add(viewstring); memo1.lines.add(' '); end;
呵~~。这好办啊。ASCII码取值范围为:0~255; 在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了; 如果你用BYTE数据发送时这样操作: var senddata:array of byte; i:=integer; const data='*0100EW*0100MD=1'; setlength(senddata,length(data)); for i:=1 to length(data) do senddata[i-1]:=ord(data[i]); COMM1.WriteCommData(senddata[0],Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型; senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了; 方法参考前面兄台提供的方法: COMM1.WriteCommData(data[1],Length(data));
//----------更正下呵~~。这好办啊。ASCII码取值范围为:0~255; 在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了; 如果你用BYTE数据发送时这样操作: var senddata:array of byte; i:=integer; const data='*0100EW*0100MD=1'; setlength(senddata,length(data)); for i:=1 to length(data) do senddata[i-1]:=ord(data[i]); COMM1.WriteCommData(pchar(senddata),Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型; senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了; 方法参考前面兄台提供的方法: var data:string; COMM1.WriteCommData(pchar(data),Length(data));
procedure Tfcomm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
ModemSt:DWORD;
recedata:Pchar;//字符串都是指针类型,包括pchar和string
begin
viewstring:='COM受到的字符:'; //接受到的是字符串
getmem(recedata,bufferlength);
if sendtype then //sendtype:true; 发送全部字符,false:挨个发送
begin
move(buffer^,ReceData,bufferlength);//Pchar已经是指针类型的,不需要使用任何指针
for i:=0 to bufferlength-1 do
begin
memo1.Lines.Add(inttostr(i)+' 内容:'+string(recedata[i]));
viewstring:=viewstring+string(recedata[i]);
end;
end
else //挨个接收字符串
begin
recedata:=buffer;
viewstring:=viewstring+pchar(recedata);
end;
of an integer.
memo1.lines.add(viewstring);
memo1.lines.add(' ');
end;
定义一个byte型的数组,给数组单元赋ascii值.
具体的该怎么做呢?该怎么把ASCII赋值给bute类型?这个类型好像发16进制的比较方便啊。如:$12。之类的。如果发ASCII的华,感觉直接发Pchar就差不多了吧。因为我的接收部分已经做好了。而且都正常,我接收的时候就是用Pchar类型接收的。那么发送的华,用Pchar应该也不错的。
.....
SPCOMM.WriteCommData(@SendByte,Length(SendByte));
.....
而楼上的Var SendByte:TByte;
.....
SPCOMM.WriteCommData(@SendByte,Length(SendByte));
我怎么觉得发送的是二进制吧。
希望楼下的能确认一下,TByte类型是不是ASCII类型。PChar我知道是字符类型,但是不清楚是不是ASCII类型!
现在的问题是数据类型的问题了。
ASCII到底是TByte还是Pchar?
请楼下的明确一下。
TByte是二进制还是ASCII
Pchar是ASCII码吗?
在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了;
如果你用BYTE数据发送时这样操作:
var
senddata:array of byte;
i:=integer;
const
data='*0100EW*0100MD=1'; setlength(senddata,length(data));
for i:=1 to length(data) do
senddata[i-1]:=ord(data[i]);
COMM1.WriteCommData(senddata[0],Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型;
senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了;
方法参考前面兄台提供的方法:
COMM1.WriteCommData(data[1],Length(data));
在DELPHI中取值范围与之相同的有BYTE与CHAR两种类型的数据了;
如果你用BYTE数据发送时这样操作:
var
senddata:array of byte;
i:=integer;
const
data='*0100EW*0100MD=1'; setlength(senddata,length(data));
for i:=1 to length(data) do
senddata[i-1]:=ord(data[i]);
COMM1.WriteCommData(pchar(senddata),Length(data));用CHAR类型发送时,你可以用上面同样的代码,只是数据类型都要换成CHAR类型;
senddata[i-1]:=data[i];//----这一句改一下。当然,你可以直接用STRING类型来发送,因STRING类型本身也是一种动态字符数组类型了;
方法参考前面兄台提供的方法:
var data:string;
COMM1.WriteCommData(pchar(data),Length(data));
看来如果要是发送接收的都是ASCII,那么发送的时候一定要以PCHAR类型发送,接收的话也要以PCHAR类型接收。
至于BYTE的发送和接收,那就不一样了。
散分。