1.现在块传输的函数usb_bulk_read只能从设备中读取char类型的数据,但是实际使用中设备需要发送unsigned int型的数据。如何能实现直接从设备中读取unsigned int型的数据呢?
可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。
展开全部你把发过去的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 的,别传入负值了,不然转换解析也会有问题。会转换成很大的unsigned int值。追问兄弟,问题是上位机使用的libusb文件中的usb_bulk_read读取的是char型的,有符号的啊!
文件是libusb文件,开源专业用于usb通信的,唉,函数还是太少了啊追答你说实际类型发的是unsigned int类型的,我就提了按这种方式的处理方法...
如果传递的包含int型,也可以这样处理。只不过在接受端的receiveDate就也应该是int型了,因为实际传过来的是位。然后根据receiveDate是unsigned int还是int自动进行解析了传递过来数据的符号位。
可以通过一个在函数中写if来判断你传递的数据是类型,返回标记1, 2,分别表示是unsigned还是非unsigned。然后在接收端的函数使用标记决定用哪个类型的receiveDate来接收,接收端定义2个接收的变量。
