我有十六进制代码,如0x38,0x39,0xC0和0xE8,我想发送这个十六进制代码,因为它是蓝牙,不需要转换为十六进制或int。我使用此代码在我的应用程序中发送(蓝牙活动):
byte[] hex_txt = {(byte)0x38, (byte)0x39, (byte)0xC0, (byte)0xE8};
OutputStream outStream;
try {
outStream = socket.getOutputStream();
outStream.write(hex_txt);
System.out.println("byte sent: " + hex_txt);
}
当我将此代码发送到蓝牙时,它会进一步发送到Arduino板,它必须匹配这些十六进制代码并执行一些操作。我的arduino代码是:
if(Serial.available()>3)
{
if(Serial.read()==0x38 && Serial.read()==0x39)
code=Serial.read()+Serial.read()*256;
irsend.sendCode(code,16);
Serial.println("code sent is");
Serial.println(code,DEC);
}
没有这个Arduino代码的问题,但是从我的应用程序发送到蓝牙可能是错误的......所以它不匹配。我需要以什么类型发送这些十六进制代码?
答案 0 :(得分:2)
-64
可能是0xC0
的表示(请参阅http://en.wikipedia.org/wiki/Signed_number_representations)。我没有使用Arduino代码,但我建议你确保Serial.read()
返回的值被解释为无符号整数/字节。这将帮助您手动解释带符号的位表示和数字输出。