现在出现这样一个问题,就是传输数据的时候,遇到终止符数据传输就终止了。我在传的过程中,会在每段数据的末尾加一个"&",以说明传输结束。
但传输的过程中,数据经常中途被截断。比如传输十进制数据1975892时,其二进制是1E2654,传到0X26时数据传输就被截断了。也用"\0"做过终止符,但是碰到0时,也是传输被打断。请问,我错在哪里,该如何解决这样的问题呢?

解决方案 »

  1.   

    你传输的时候,要用unsigned char 吧,而且对方也要连续收才对。
      

  2.   

    拷贝字符串时0做结束符,0后面的数据当做了无用数据,可以选择memcpy函数进行拷贝。
      

  3.   

    我发送时,定义了一个char的发送缓存数组,传的时候是用的sendto函数。请问对方要连续收是什么意思?
    我设的evnChar = &,但串口传输的时候,虽然原始数据是数字,但二进制位常出现&,这就导致&后的数据接不到了。接收的时候,也是定义了一个char的数组接收缓存,但是我发现接收缓存在遇到0时就不接收了,然后我用memcpy把接收缓存赋给事先定义好的结构体,可以自动取得对应位的值。但现在数据被截断了,事先定义结构体中的一部分数据就取不到值了
      

  4.   

    传输的时候用unsigned char 为什么?我传的原始数据中有负数啊
      

  5.   

    用一个连续的多个字符作为结尾标志
    这样重复率会降低
    比如AA55或A5A5之类的
      

  6.   

    LS的也是个办法,
    在数据段中出现的数据是不能做数据头尾的,
    你可以考虑数据段使用全字符表示,而数据头采用不涉及到字符的ascii码做标示。
      

  7.   

    我设定dcb.EvtChar = "&",但用它的问题是在数据段中会经常出现ascii对应为"&"的数字而导致传输中断,我觉得用一个连续的多个字符作为结尾标志挺好的,但不知道该怎么实现,EvtChar 好像只能设置为单个字符,设置不了两个字符。“用一个连续的多个字符作为结尾标志”,用什么命令可以控制呢?
    “数据段使用全字符表示,而数据头采用不涉及到字符的ascii码做标示。”我设定的数据尾是用不涉及到字符的ascii码做标示的,但是数据段我定义的是char数组,我想请问数据段使用全字符表示是什么意思,串口发送时传入的char*缓存都是用ascii码表示的,若把数据段使用全字符表示是意味着把数据段的每个数字包括正负号分别用ascii表示吗?这样的话发送时的数据缓存是不是要开到很大才行?
      

  8.   

    串口通信不是用WriteFile吗,怎么会是用sendto啊,这个好像是udp的发送数据吧,可以用memcpy复制数据,发送的时候在WriteFile里面制定发送长度吧