这是将位移到char中的正确方法吗?
char value = (char)((array[offset] << 9) + (array[offset + 1]));
如果没有,请纠正我。
答案 0 :(得分:0)
Java中的字节有点棘手。 他们不会像你从其他语言习惯的那样从0到255。相反,它们从0到127,然后从-128到-1。
这意味着,byte
数组中低于128的所有字节都将使用以下代码转换为正确 char
:
char value = (char)((array[offset] << 8) + (array[offset + 1]));
但如果byte
值高于127,您可能会得到您没想到的结果。
小例子:
class test {
public static void main(String[] args) {
byte b = (byte)150;
char c = (char)b;
int i = (int)c;
System.out.println(b);
System.out.println(c);
System.out.println(i);
}
}
将输出:
-106
ヨ
65430
不完全是您所期望的。 (根据当然,你对Java的了解程度如何)。
因此,要将2个字节正确转换为char,您可能需要这样的函数:
char toChar(byte b1, byte b2) {
char c1 = (char)b1;
char c2 = (char)b2;
if (c1<0) c1+=256;
if (c2<0) c2+=256;
return (char)((c1<<8)+c2);
}