Как я могу получить байт, который представляет собой непознанный int в Java?
-
27-10-2019 - |
Вопрос
У меня есть целые числа от 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
.