libusb文件,libusb.lib和usb.h。里面块传输部分usb_bulk_read只能读取char类型的数据,远远不能满足需要
发布网友
发布时间:2022-05-11 16:21
我来回答
共1个回答
热心网友
时间:2023-10-15 04:28
你把发过去的unsigned int拆成2个unsinged char,高位那个为0,发过去后然后接受到的两个合并为一个unsigned int。问一下,这是16位的么?
我没有弄过这个通讯.我猜测应是端unsigned char型发生了隐式转换,成为了unsinged int(或unsigned short int)型,因此高8位均为0了。接受到的时候,将比特流按8位来解析,于是产生了2个数据,还有一个为0.
你可以尝试传入一个负数(char型的),应该会产生结果很大差异,因为这时候隐式转换将符号位作为值就有问题了。高8位都是1。接受到的数据0就应该会变成255。
(上述都只是我的猜测)具体工作原理不知....
我说下我的解决思路:
unsigned char convertDate[2];
unsigned char mask = 0xFF;
unsigned int transportDate; // 待传输的数据
convertDate[0] = transportDate & mask; // 低位字节
convertDate[1] = (transportDate >> 8) & mask; // 高位字节
将这个数组的两个字节发送过去,然后在那端进行合并。
接受那边每次接受两个数据进行一次转换
unsinged int receiveDate = 0;
receiveDate = rConvertDate[1] & mask; // 存储高位
receiveDate <<= 8; // 移动到高位
receiveDate = rConverDate[0] & mask; // 存储低位
合并得到的receiveDate就是转换得到的。
然后,你在自己写发送端、接收端数据处理函数对收发数据进行上述的处理。这样转换后显示应该会正常吧。
最后说下:就是传递的参数说了是unsigned 的,别传入负值了,不然转换解析也会有问题。会转换成很大的unsigned int值。追问兄弟,问题是上位机使用的libusb文件中的usb_bulk_read读取的是char型的,有符号的啊!
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);这是该函数的声明。无法看到函数体,所以想求个类似该函数的,能读取unsigned int型的函数。
文件是libusb文件,开源专业用于usb通信的,唉,函数还是太少了啊
追答你说实际类型发的是unsigned int类型的,我就提了按这种方式的处理方法...
如果传递的包含int型,也可以这样处理。只不过在接受端的receiveDate就也应该是int型了,因为实际传过来的是位。然后根据receiveDate是unsigned int还是int自动进行解析了传递过来数据的符号位。
思路:
可以通过一个在函数中写if来判断你传递的数据是类型,返回标记1, 2,分别表示是unsigned还是非unsigned。然后在接收端的函数使用标记决定用哪个类型的receiveDate来接收,接收端定义2个接收的变量。
不知道这样可不可以,不过好像有点麻烦了。