Frage

Ich habe Ganzzahlen von 0 bis 255 und muss sie an einen als nicht signierten Bytes codierten Output -Stream weitergeben. Ich habe versucht, eine Maske wie so zu konvertieren, aber wenn ich = 1, der andere Ende meines Streams (ein serielles Gerät, das uint8_t erwartet), denkt, ich habe eine unsignierte Ganzzahl gesendet = 6.

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

Ich spreche mit einem Arduino bei /dev/ttyUSB0 Verwenden von Ubuntu, wenn dies die Dinge mehr oder weniger interessant macht.

Hier ist der Arduino -Code:

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

Ich habe auch einen Python -Code, der mit dem Arduino -Code hervorragend funktioniert, und der Arduino empfängt glücklich die richtige Ganzzahl, wenn ich diesen Code in Python verwende:

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]))

Ich würde dies auch in Scala auch gerne tun, aber ich fällt zurück zu Java, um die Komplexität zu vermeiden, während ich dieses Problem löste.

War es hilfreich?

Lösung

Werfen, dann maskieren: ((byte)(i)&0xff)

Aber etwas ist sehr seltsam, da:

(Dez) 8 - (binär) 1000
(Dez) 6 - (binär) 0110

bearbeiten
Wie erhält Ihr Arduino 6 (binär) 0110, wenn Sie 1 (binär) 0001 senden?
/bearbeiten

Andere Tipps

Ich denke du willst nur out.write(i) hier. Nur die acht Bit mit niedriger Ordnung sind aus dem Int-Argument geschrieben i.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top