我目前遇到的问题是,我喜欢通过蓝牙(以16位编码)向嵌入式设备发送一些命令。不幸的是,Java中似乎存在转换错误,或者至少我不知道如何处理它。
这些位是例如1001 0010 1011 0010 我考虑过为此使用char(16位),但有时它会被Java转换为24位(3个打印字符),当我尝试将其添加到字符串时。这取决于整数值。
如何在此处获取打印的ASCII(或其他)字符? bluetooth-function需要String作为参数。
int a = 127, b = 221; // 0-255 32 bit
char p1 = (char) b; // 0000 0000 bbbb bbbb 16 bit
char p2 = (char) a; // 0000 0000 aaaa aaaa 16 bit
// bbbb bbbb aaaa aaaa
char anUnsignedShort = (char) ((p1 << 8) | p2); // 16 bit
System.out.println(""+(char)2+anUnsignedShort+(char)3);
// ???? ???? bbbb bbbb aaaa aaaa -- 24bits sometimes. Why ???
答案 0 :(得分:0)
了解String Concatenation Operator +的隐式转换可能很有用。或者,考虑byte[]
,适用于OutputStream
:
byte[] ba = {(byte) 2, (byte) 221, (byte) 127, (byte) 3};
System.out.println(Arrays.toString(ba));
附录:
我需要它为
character
- 在这种情况下为4个字节0x02,等。
同样的原则适用,除非您获得平台的默认字符编码。
char[] ca = {(char) 2, (char) 221, (char) 127, (char) 3};
System.out.println(Arrays.toString(ca));