日期:2014-05-16  浏览次数:20628 次

串口接收程序运行环境由windows改为linux后是否有大小端问题?
简单的从串口读取数据,每次13个字节。下面的过程删去了些判断执行成功否的语句。  

  fd = OpenDev(g_deviceName );
  set_speed(fd,g_deviceRate);
  set_Parity(fd,8,1,'N');
  fLog = fopen("comdata.log","w+");
  while((nread = read(fd,buff,13))>0)
  {
  //处理。。。。  
  sleep(1);
  }

  以前是另外一个VC8的串口读取程序,运行在windows下,每次读13个字节,然后处理。上面是我的程序,与前一个程序不同的是我这个会运行在linux下,实验结果是两个程序在处理同一个输入的时候,结果不同。

  后面的处理,会按接收顺序,把这13个字节先变成0、1的字符串,比如8,就会变成0000 1000,然后再处理这13 * 8 = 108 个01字符串。
  我怀疑是不是两个操作系统大小端不一样,导致我在linux下读出的串口数据,处理时会因为字节顺序不同,而导致的最后形成的01字符串不一样?
  但又有人说大小端只有在int等数据类型时才有影响,char类型不受影响,请各位赐教!!

------解决方案--------------------
确实大小端是针对整数而言的

这13个字节是怎么发送的,里面有没有包含整数呢?
如果是一个单纯的字符串,问题应该不大
如果是从一个结构体啥的转换而来,而结构体里面又包含整数的话,可能有影响
------解决方案--------------------
大小端跟cpu有关,与操作系统无关。
当然不包括网络传输