1

我有从 0 到 255 的整数,我需要将它们传递给编码为无符号字节的 OutputStream。我尝试使用这样的掩码进行转换,但如果 i=1,我的流的另一端(需要 uint8_t 的串行设备)认为我发送了一个无符号整数 = 6。

OutputStream out;
public void writeToStream(int i) throws Exception {
    out.write(((byte)(i & 0xff)));
}

/dev/ttyUSB0如果这会让事情变得或多或少有趣,我正在与使用 Ubuntu 的 Arduino 交谈。

这是Arduino代码:

uint8_t nextByte() {
    while(1) {
    if(Serial.available() > 0) {
        uint8_t b =  Serial.read();
      return b;
     }
    }
}

我还有一些 Python 代码可以很好地与 Arduino 代码配合使用,如果我在 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 以避免复杂性。

4

2 回答 2

2

我想你只是想out.write(i)在这里。仅从 int 参数写入八个低位i

于 2011-03-20T03:46:21.923 回答
0

施放,然后遮罩:((byte)(i)&0xff)

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

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

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

于 2011-03-20T03:43:50.640 回答