如何连接两个字节的基元来获取java中的一个char?我现在正在尝试这个:
byte a = 0x01;
byte b = 0x02;
char c = (char) (a + b);
给出0x03。我想要的答案是0x0102。
有没有简单的方法来连接原语?我很惊讶没有一个明显的解决方案,因为它看起来应该很容易。也许有,我只是没有看到它。 :P
任何帮助将不胜感激。 谢谢!
答案 0 :(得分:4)
通过左移8位并添加。像,
byte a = 0x01;
byte b = 0x02;
char c = (char) ((a << 8) + b);
System.out.println(Integer.toHexString(c));
输出
102
正如评论中指出的那样(@ChrisMartin)你可以按位 - 或者(我也可以添加你xor
)
char c = (char) ((a << 8) | b);
和
char c = (char) ((a << 8) ^ b);
为了达到同样的效果。既然你应该Write Dumb Code我建议你使用最容易理解的那些。
答案 1 :(得分:1)
如果您不反对使用第三方库,Guava的Chars.fromBytes方法就是这样做的:
char c = Chars.fromBytes(0x01, 0x02);
答案 2 :(得分:0)
正确的表达式是((a << 8) | (b & 0xff))
:
byte a = (byte) 0x81;
byte b = (byte) 0x82;
char c = (char) ((a << 8) | (b & 0xff));
在表达式中使用时,字节将提升为int
,完成此操作后,将对其进行符号扩展。另一个答案中的表达式仅在b <= 127
时有效。
如果您将该值再添加1个字节,则其值为-128
。 (Java中的字节范围是-128到127)因此,当您使用它来存储无符号数时,通常必须使用b & 0xff
屏蔽一个字节。您不需要在上面的表达式中使用a
执行此操作,因为所有高位都移出了生成的16位字符。