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);
}
这是将位移位转换为字符的正确方法吗?
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);
}