我有0到255之间的整数,我需要将它们传递给编码为无符号字节的OutputStream。我试图使用这样的掩码转换,但如果i = 1,我的流的另一端(一个期望uint8_t的串行设备)认为我发送了一个无符号整数= 6。
OutputStream out;
public void writeToStream(int i) throws Exception {
out.write(((byte)(i & 0xff)));
}
我正在使用Ubuntu在/dev/ttyUSB0
与Arduino交谈,如果这会让事情变得更有趣或更少。
这是Arduino代码:
uint8_t nextByte() {
while(1) {
if(Serial.available() > 0) {
uint8_t b = Serial.read();
return b;
}
}
}
我也有一些与Arduino代码兼容的Python代码,如果我在Python中使用这段代码,Arduino会很高兴收到正确的整数:
class writerThread(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
while True:
input = raw_input("[W}Give Me Input!")
if (input == "exit"):
exit("Goodbye");
print ("[W]You input %s\n" % input.strip())
fval = [ int(input.strip()) ]
ser.write("".join([chr(x) for x in fval]))
我最终还是喜欢在Scala中这样做,但是当我解决这个问题时,我会回到Java以避免复杂性。
答案 0 :(得分:2)
我想你只想要out.write(i)
。只有8个低位是从int参数i
写入的。
答案 1 :(得分:0)
施放,然后掩饰:((byte)(i)&0xff)
但是,有些事情很奇怪,因为:
(dec)8 - (二进制)1000
(dec)6 - (二进制)0110
[编辑]
当你发送1(二进制)0001时,你的Arduino如何接收6(二进制)0110?
[/编辑]