ASCII码值为0的字符问题 我在做串口通信程序,在使用16进制收发时,我使用的方法是:把所有待发送字符先转换成BCD码,再将连续的两个单字符组合,保存到UCHAR型数组中,再使用WiteFile发送。当输入的一字节字符为“00”时,转换结果为空字符,其后的字符得不到处理,当然也不会被发送出去,其他所有的16进制字符转换均没有问题,可以正常收发,请问怎么处理这个ASCII为0的字符才能得到正确的结果? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的空字符是啥意思,NULL的ASCII码就是O ASCII 十六进制 0 30 1 31 从你提问来看已正常发送和接收,UCHAR 数组已保存有含0字符,如果显示会被截断。检查ReadFile 返回值即可(例 lstrlen 肯定小于返回值)。 dwr 发送时dwl不能用 lstrlen(因为有0) 要用实际的发送字节大小。 WriteFile(,,dwl,&dwr,0);接收时检查dwr值 ReadFile(, ,,&dwr,0); 不懂,能不能说的再明白些,谢谢了。在字符到16进制数据转换时,遇到0,其后的字符的处理结果根本没有保存下来(我在调试过程中已证实),所以,不管发送之前使用不使用lstrlen数据都不会发送出去。我是这样认为的,对吗? 发送时dwl不能用 lstrlen(因为有0) 要用实际的发送字节大小。----------------------------------------------------------------char pc[8]={'a','b','\0','c','\0','d','e','\0'};WriteFile(hf,pc,8,dwr,0);dwr = 8;WriteFile(hf,pc,strlen(pc),dwr,0);dwr = 2;这样试试就知道为什么了。如果发送8个,dwr = 8表示成功接收时ReadFile(hf,pc,8,dwr,0);如果dwr = 8,pc必然是pc[8]={'a','b','\0','c','\0','d','e','\0'};如果你msg 当然只显示"ab"了。你可以保存到文件就知道了,这么简单的问题,如你所说,发送int 10 接收都会出错,因为int 10有4位前3位都是0。 解决了,谢谢大家,尤其是3jaja LPTSTR转string 关于外网向内网发送数据 【新手求组】怎么样写一个Windows服务程序,请大家赐教 如何动态生成这样的字符串 不能通过状态栏来最大化和最小化窗口了,怎么回事? 高手們都說:功能要和介面分離,請問如何實現分離啊? vc下如何生成单独运行可执行文件??? 请教:用ADO,我想知道符合某一条件的纪录是否存在,代码怎么写? 我的程序发表了,看看有什么问题? 问一个简单的问题,怎样设置菜单变灰和变亮啊?也就是禁用启用菜单。 向大家请教个问题!! opengl导入obj文件时纹理坐标的问题
0 30
1 31
发送时dwl不能用 lstrlen(因为有0) 要用实际的发送字节大小。
WriteFile(,,dwl,&dwr,0);
接收时检查dwr值 ReadFile(, ,,&dwr,0);
在字符到16进制数据转换时,遇到0,其后的字符的处理结果根本没有保存下来(我在调试过程中已证实),所以,不管发送之前使用不使用lstrlen数据都不会发送出去。我是这样认为的,对吗?
----------------------------------------------------------------
char pc[8]={'a','b','\0','c','\0','d','e','\0'};
WriteFile(hf,pc,8,dwr,0);
dwr = 8;
WriteFile(hf,pc,strlen(pc),dwr,0);
dwr = 2;
这样试试就知道为什么了。如果发送8个,dwr = 8表示成功
接收时
ReadFile(hf,pc,8,dwr,0);
如果dwr = 8,pc必然是pc[8]={'a','b','\0','c','\0','d','e','\0'};
如果你msg 当然只显示"ab"了。
你可以保存到文件就知道了,这么简单的问题,如你所说,发送int 10 接收都会出错,因为int 10有4位前3位都是0。