来自Java ME中字节数组的字符

时间:2015-06-29 13:47:27

标签: java java-me

这是将位移到char中的正确方法吗?

char value = (char)((array[offset] << 9) + (array[offset + 1]));

如果没有,请纠正我。

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);
}