Как я могу получить байт, представляющий целое число без знака в Java? - PullRequest
1 голос
/ 20 марта 2011

У меня есть целые числа от 0 до 255, и мне нужно передать их в OutputStream, закодированный как неподписанные байты.Я пытался преобразовать, используя маску, например, так, но если я = 1, другой конец моего потока (последовательное устройство ожидает uint8_t) думает, что я отправил целое число без знака = 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, чтобы избежать сложности при решении этой проблемы.

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

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

0 голосов
/ 20 марта 2011

Приведение, затем маска: ((byte)(i)&0xff)

Но что-то очень странное, поскольку:

(декабрь) 8 - (двоичный код) 1000
(декабрь) 6 - (двоичный код)) 0110

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

...