W weimaoan Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-24 #1 使用SPCOMM传输数据时若字符串中有二进制数00,则后面的数不传输或停止接收,如:发送chr($31)+chr($32)+chr($00)+chr($33)+chr($34)则后面的两个字符发布出去或收不到,那位大侠知道什么原因,多谢
使用SPCOMM传输数据时若字符串中有二进制数00,则后面的数不传输或停止接收,如:发送chr($31)+chr($32)+chr($00)+chr($33)+chr($34)则后面的两个字符发布出去或收不到,那位大侠知道什么原因,多谢
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-25 #2 这是因为SPComm发送与接受采用PChar,而一个PChar字符串是以#0结尾的。 如 ShowMessage('shenqw'#0'shenqw')与 ShowMessge('shenqw')显示 一样就是这个道理。所以你的字符串中有二进制数00,则你字符串将被截断。
这是因为SPComm发送与接受采用PChar,而一个PChar字符串是以#0结尾的。 如 ShowMessage('shenqw'#0'shenqw')与 ShowMessge('shenqw')显示 一样就是这个道理。所以你的字符串中有二进制数00,则你字符串将被截断。
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-25 #4 关键是你传入的size参数要包含后面的 s:string s:=#$31#$32#$00#$33#$34 spcomm.WriteCommData(PChar(s), Length(s));
沈 沈前卫 Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-25 #5 在你读出数据时,SPComm.pas的标准用法: Move( lpszCommBuf^, lpszYourBuf^, dwSizeofBuf); lpszYourBuf[dwSizeofBuf] := #0;
在你读出数据时,SPComm.pas的标准用法: Move( lpszCommBuf^, lpszYourBuf^, dwSizeofBuf); lpszYourBuf[dwSizeofBuf] := #0;
W wrench Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-26 #6 一定要发00吗 是不是只有用另一个字符代替00, 然后再在程序中处理?
I Iknow Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-26 #7 设置好发送长度就可以了的. 当然, 发送长度要自己算, 绝对不能用什么strlen, length之类的函数
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-26 #8 Length(string)是可以的,string的中间可以包含0字符,而且string不是靠 判断0作为结束的,而是在头4个字节保存长度的。 strlen则是判断0结束,这个函数不能用
W weimaoan Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-27 #9 我试了一下,从收到的字符长度看,似乎包括00的字符全收到了,但用edit.text显示时,截掉了00后面的字符,请问用edit.text 如何显示,最好显示成30:31:32:00:33:34的格式???
我试了一下,从收到的字符长度看,似乎包括00的字符全收到了,但用edit.text显示时,截掉了00后面的字符,请问用edit.text 如何显示,最好显示成30:31:32:00:33:34的格式???
K Kang Unregistered / Unconfirmed GUEST, unregistred user! 2000-03-27 #10 自己一个一个转成整数,再换成字符串,放到edit.text里
王 王亮 Unregistered / Unconfirmed GUEST, unregistred user! 2000-04-01 #11 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如法炮制。
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如法炮制。
Y yansh Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-09 #12 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;
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;
Z zjeijf Unregistered / Unconfirmed GUEST, unregistred user! 2000-05-10 #13 请给我spcomm的应用的源代码,感激万分! zjeijf@163.net
D denglb Unregistered / Unconfirmed GUEST, unregistred user! 2001-06-07 #15 请问WeiMaoAn,00二进制的接受问题到底如何解决,给我一份结果,如何? Denglb@sina.com