连接字节以获取char

时间:2014-12-02 05:06:14

标签: java

如何连接两个字节的基元来获取java中的一个char?我现在正在尝试这个:

byte a = 0x01;
byte b = 0x02;
char c = (char) (a + b);

给出0x03。我想要的答案是0x0102。

有没有简单的方法来连接原语?我很惊讶没有一个明显的解决方案,因为它看起来应该很容易。也许有,我只是没有看到它。 :P

任何帮助将不胜感激。 谢谢!

3 个答案:

答案 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位字符。