二进制00的spcomm传输问题,急急急!!!(100分)

  • 主题发起人 主题发起人 weimaoan
  • 开始时间 开始时间
W

weimaoan

Unregistered / Unconfirmed
GUEST, unregistred user!
使用SPCOMM传输数据时若字符串中有二进制数00,则后面的数不传输或停止接收,如:发送chr($31)+chr($32)+chr($00)+chr($33)+chr($34)则后面的两个字符发布出去或收不到,那位大侠知道什么原因,多谢
 
这是因为SPComm发送与接受采用PChar,而一个PChar字符串是以#0结尾的。
如 ShowMessage('shenqw'#0'shenqw')与 ShowMessge('shenqw')显示
一样就是这个道理。所以你的字符串中有二进制数00,则你字符串将被截断。
 
转换成pchar
 
关键是你传入的size参数要包含后面的

s:string

s:=#$31#$32#$00#$33#$34

spcomm.WriteCommData(PChar(s), Length(s));
 
在你读出数据时,SPComm.pas的标准用法:

Move( lpszCommBuf^, lpszYourBuf^, dwSizeofBuf);
lpszYourBuf[dwSizeofBuf] := #0;


 
一定要发00吗
是不是只有用另一个字符代替00,
然后再在程序中处理?
 
设置好发送长度就可以了的.

当然, 发送长度要自己算, 绝对不能用什么strlen, length之类的函数
 
Length(string)是可以的,string的中间可以包含0字符,而且string不是靠
判断0作为结束的,而是在头4个字节保存长度的。

strlen则是判断0结束,这个函数不能用
 
我试了一下,从收到的字符长度看,似乎包括00的字符全收到了,但用edit.text显示时,截掉了00后面的字符,请问用edit.text 如何显示,最好显示成30:31:32:00:33:34的格式???
 
自己一个一个转成整数,再换成字符串,放到edit.text里
 
C语言,提供?
char *buffer; //你的数据
int i, size = 20; //你数据的长度
char *dispbuffer = n; // 你要显示的地方
for(i = 0 ; i < size; i++)
sprintf(dispbuffer + i * 3, "%2.2x:", (char)*(buffer + i));
cout << dispbuffer << endl;

//结果 31:32:33:00:34......
delphi如法炮制。
 
I do so:

//*****************
procedure TForm1.FormCreate(Sender: TObject);
var
IniFileName:string;
begin
IniFileName:=ExtractFilePath(ParamStr(0))+'comsetup.ini';
IniFile:=TIniFile.Create(IniFileName);
SendTimer.Enabled :=false;
LoadSettings;
try
try
Comm1.startcomm;//创建窗体时,将comm1控件打开。
SendBuffer[0]:=$aa; SendBuffer[1]:=$07;
SendBuffer[2]:=$01; SendBuffer[3]:=$88;
SendBuffer[4]:=not(SendBuffer[0]+SendBuffer[1]+
SendBuffer[2]+SendBuffer[3]);
SendBufferLength:=5;
Sendtimer.Enabled :=true;
Except
on E:Exception do
showmessage(E.Message );
//comm1.StopComm ;
end;
finally
showmessage('form2.show-Finally');
// comm1.StopComm ;
end;
end;
 
请给我spcomm的应用的源代码,感激万分!
zjeijf@163.net
 
多人接受答案了。
 
请问WeiMaoAn,00二进制的接受问题到底如何解决,给我一份结果,如何?
Denglb@sina.com
 

Similar threads

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