[问] android usb host 编程相关问题

2015-12-02 15:22:20 +08:00
 xionghengheng
背景: Android 手机需要和一块单片机进行 USB 通信,目前单片机采用的是 Arduino 。然后自己写了测试程序,单片机端就是把读到的字节简单返回, Android 端,能正常写,也能读,但是读出来的字节数组却不对。

问题:
byte[] WriteData = new byte[64];
for (int i = 0; i < WriteData.length; i++)
{
WriteData[i] = (byte) (i + 1);
}
4913 次点击
所在节点    Android
10 条回复
xionghengheng
2015-12-02 15:23:04 +08:00
返回的字节码是一堆的负数,但是个数是对的
xuyinan503
2015-12-02 15:53:34 +08:00
xionghengheng
2015-12-02 16:10:14 +08:00
@xuyinan503 传的是 1-64 的字节码,这个在 c 和 Java 里应该都是正数的,只是大于 128 就会那样
xuyinan503
2015-12-02 16:27:38 +08:00
@xionghengheng 就是我给你发的那个。好好学英语

得出来的结果 x & 0xFF 一下就可以了
xuyinan503
2015-12-02 16:29:20 +08:00
原因是二进制第 1 位被认为是符号位了。
miao1007
2015-12-02 16:30:26 +08:00
字符串通信,建议用 okio 试试
xionghengheng
2015-12-02 17:00:52 +08:00
@xuyinan503 64 的二进制 0100 0000 ,如果最高位是 0 ,那么不管是有符号还是无符号是不是都是一样的?
xionghengheng
2015-12-02 17:03:41 +08:00
@miao1007 底层都是字节流,字节数据的值不知道为什么不准确
xuyinan503
2015-12-02 17:07:30 +08:00
@xionghengheng 0 正 1 负
所以 01111111(127)是正的
再大就是负的
xionghengheng
2015-12-03 11:33:02 +08:00
原来是手机的波特率和板的波特率不一样导致了字节码的错位,已解决······

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/240585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX