请教高手:在VC中如何发送ASCII码0到串口?谢谢赐教!

xuing 2003-10-20 02:32:08
请教高手:在VC中如何发送ASCII码0到串口?谢谢赐教!

在发送字符串的时候,如果遇到ASCII码0的话,VC就认为是结束了,就不发。无论是文本方式还是二进制方式都是如此。

而我要发送二进制文件,里面难免会包含0。这不就惨了吗?

想请各位高手帮帮忙!!
...全文
162 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
dcydd 2004-01-03
  • 打赏
  • 举报
回复
传输数据时,无论是IP还是RS232通讯,也不管发送的是ASCII码还是二进制,应该引用数据缓存区的地址(BYTE *Buf)和占用缓存区的字节数(int Len) ,字符串指针就是缓存区地址.
如:
char buf[]="1234567890";
int Len=10;
WriteComm(com,buf,Len);
这样无论你想发送什么数或字符都可以,此处'0'不可能丢失!
smalldragon 2003-12-18
  • 打赏
  • 举报
回复
同意zhuxiaoming(zhuxiaoming)的说法,一定注意发送时使用数组,BYTE类型的,发送时写入长度用数组长度
zhang920171 2003-12-18
  • 打赏
  • 举报
回复
发送0是可以的,估计还是转换的时候丢了。
半宫佳丽 2003-12-17
  • 打赏
  • 举报
回复
觉得他们说的对,不是在串口丢的,而是在字符转换时就丢了
zhuxiaoming 2003-10-22
  • 打赏
  • 举报
回复
在发送时,使用BYTE发送,发送的字节数万万不能使用lstrlen(s),必须获得需要发送的字节数,例如:
BYTE s[100];
s[0]=1;
s[1]=0;
s[2]=2;
s[3]=3;
DOWRD nLength = 4; ////////不能使用lstrlen(s)
WriteFile(pComm1,(char *)s,nLength,&nLength,........);
一定是可以的,我在无数个程序中使用过了。
liuliguo940 2003-10-21
  • 打赏
  • 举报
回复
发送时在长度的变量中加1就可以了
duyhui 2003-10-21
  • 打赏
  • 举报
回复
不是不能发,是你转化的时候用的CString str=str.Format("%s",你的数组名吧);这样肯定不行的

你用CString str=str.Format("%c",数组[i])一个一个转化,再累加,再发就行了!!

我早就遇到过你的这个问题

xuing 2003-10-21
  • 打赏
  • 举报
回复
我是直接使用MsCOMM控件的,并没有编写串口发送的代码。
能不能提供一些合适的代码和一些建议啊?

谢谢了!!
yanzhaojiang00 2003-10-21
  • 打赏
  • 举报
回复
把你要传输的数据以二进制的形式存入VARIANT类型的缓冲区中,然后再进行传输。这样数据就不会丢失。我估计你的数据是在CString类型的变量中已经丢掉了,而不是在串口传输的时候丢失的。因为传口的传输数据的针脚和数据传输结束标志的针脚不是同一个,不会说遇到ASCII码为0的数据就结束传输的。可以提供你的代码吗?
xuing 2003-10-21
  • 打赏
  • 举报
回复
是发送ASCII码的0(0x00),而不是字符的0(0x30)。
确实只能收到C。

还有没有高手啊???
半宫佳丽 2003-10-20
  • 打赏
  • 举报
回复
真的吗??
你发送 “C0C0C0”,只收到一个C???
xuing 2003-10-20
  • 打赏
  • 举报
回复
'\x00'='\0'=0
这些表达我都试过了,就是不能发。

有哪位高手高手高高手能帮帮忙啊!!!
fificake1 2003-10-20
  • 打赏
  • 举报
回复
'\x00'

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧