分类: LINUX
2012-09-14 14:18:29
由于我的设备多是mips的嵌入式平台,而服务器一般是x86的CPU平台,在传输笔迹的时候,如果我只是放入结构体里,里面为整型,这是传到服务器端解析时发现数值完全不一样,这个是因为数据大小端的问题,当数值类型的长度大于一个字节时,在不同cpu体系之间传输时,就会解析异常,所以在试点时,我直接传输的是字符型数组,但总感觉这样傻乎乎的。
现在在开发新签字板时,我发现一个问题,以前我一直认为坐标x,y是应该成对出现的,否则为无效,其实不然,驱动一般传输给我们的是变化的值,即如果只有x变化,则只会传输x值,这是其实一个新点,y应该使用之前的y。所以之前我发的点少了,导致写出的字有锯齿,所以在绘王这个板子上,我把所有的有效点都发出了,发现客户端绘图速度太慢,主要是点多了,我一个一个点的传时间太长,所以跟谢总讨论10个点一起发,这是定义16位为x的长度,这是就又遇到大端小端的问题。
本来我想用TCP/IP里的网络字节序的函数来转换,但突然想到我可以将数值的高8位和数值的低八位分别放在第一个字节和第二个字节里,这样谢总那边就可以用第一个字节的值左偏移8位加上第二个字节来组合一个数值,这样就可以解决大端下端的问题。
在测试中,我犯了个错误就是x=data[0]<<8+data[1] 这个异常特别难看出来,<<的优先级特别低,实际是左移动8+data[1]位,正确的写法时x=(data[0]<<8)+data[1]. 右移同样需要注意这个问题。