如何在Java中获取表示unsigned int的字节?

时间:2011-03-20 03:39:32

标签: java scala serial-port arduino unsigned-integer

我有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以避免复杂性。

2 个答案:

答案 0 :(得分:2)

我想你只想要out.write(i)。只有8个低位是从int参数i写入的。

答案 1 :(得分:0)

施放,然后掩饰:((byte)(i)&0xff)

但是,有些事情很奇怪,因为:

(dec)8 - (二进制)1000
(dec)6 - (二进制)0110

[编辑]
当你发送1(二进制)0001时,你的Arduino如何接收6(二进制)0110? [/编辑]