【发布时间】:2014-03-19 04:17:15
【问题描述】:
如何将以下 int 获取到字节数组。我一直在阅读其他 SO 问题,一切都令人困惑,有人可以解释代码中发生了什么。
int val = 1023; // the int will vary from 0 to 1023 (it's the analogRead value from an Arduino board)
我想要这个作为字节数组的目的是为了让我可以将它用于 Arduino 的 server.write()。
这是我目前想出的:
int val = analogRead(A0);
Serial.println(val);
byte value[2];
value[1] = val & 0x000000ff;
value[0] = (val & 0x0000ff00) >> 8;
server.write(value[0]);
server.write(value[1]);
我正在尝试与我编写的 Android 应用程序进行 TCP 通信,这是接收端:
mmInStream = mmSocket.getInputStream();
final byte[] buffer = new byte[16384]; // two bytes
int bytes;
bytes = mmInStream.read(buffer);
Log.d(null,buffer[0]+buffer[1]);
这对吗?
Arduino 控制台正在吐出值,例如:
870
870
870
872
但是,我的 Android 应用程序会输出以下内容,例如:
3102
3105
1033
1035
我一定是在这里做错了!
回答:Arduino 发送无符号字节,java 只接收有符号字节。我在 java 端用一些代码修复了它。
【问题讨论】:
-
是的,这很好,也是一种很好的做事方式。您可以从十六进制常量中删除前导零。
-
@MattMcNabb 但是,由于他正在处理一个 4 字节的
int,因此它肯定清楚地表明了他正在使用哪些字节。就个人而言,我喜欢它带有前导零 - 它显示了整个宽度。 -
Log.d(null,buffer[0]+buffer[1]);行是否先将缓冲区[0] 转换为字符串?如果没有,你将字节加在一起,结果弄乱了