Java ME 中字节数组中的字符

Char from Byte Array in Java ME

这是将位移位转换为字符的正确方法吗?

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

如果不对请指正

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