Java で unsigned int を表すバイトを取得するにはどうすればよいですか?
-
27-10-2019 - |
質問
0 から 255 までの整数があり、それらを符号なしバイトとしてエンコードされた OutputStream に渡す必要があります。このようなマスクを使用して変換しようとしましたが、i=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;
}
}
}
また、Arduino コードと連携してうまく動作する Python コードもいくつかあります。このコードを 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 に戻ります。
解決
キャストしてからマスクします。 ((byte)(i)&0xff)
しかし、次のような理由から、何かが非常に奇妙です。
(12 進数)8 ~ (2 進数)1000
(12 進数)6 - (2 進数)0110
[編集]
1 (バイナリ)0001 を送信したとき、Arduino は 6 (バイナリ)0110 をどのように受信しますか?
[/編集]
他のヒント
私はあなたがただ欲しいと思います out.write(i)
ここ。 8つの低次のビットのみがINT引数から書かれています i
.
所属していません StackOverflow