Как я могу получить байт, который представляет собой непознанный int в Java?

StackOverflow https://stackoverflow.com/questions/5366613

Вопрос

У меня есть целые числа от 0 до 255, и мне нужно передать их с помощью выходного процесса, закодированного в виде беспигенных байтов. Я пытался преобразовать, используя маску, как SO, но если я = 1, другой конец моего потока (последовательное устройство, ожидающее Uint8_T), думает, что я отправил беззначительный целый integer = 6.

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

Я говорю с Arduino в /dev/ttyUSB0 Использование Ubuntu, если это делает вещи более или менее интересными.

Вот код Arduino:

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

У меня также есть код Python, который прекрасно работает с кодом Arduino, и Arduino с радостью получает правильное целое число, если я использую этот код в Python:

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, чтобы избежать сложности, пока я решаю эту проблему.

Это было полезно?

Решение

Бросить, затем маска: ((byte)(i)&0xff)

Но что -то очень странное с тех пор:

(DEC) 8 - (двоичный) 1000
(DEC) 6 - (двоичный) 0110

редактировать
Как получает ваш Arduino 6 (двоичный) 0110, когда вы отправляете 1 (двоичный) 0001?
/редактировать

Другие советы

Я думаю, ты просто хочешь out.write(i) здесь. Только восемь битов низкого порядка написаны из аргумента Int i.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top