【发布时间】:2018-06-06 10:41:42
【问题描述】:
目前我对以下代码有疑问:
String a = "0932300090";
byte[] b = a.getBytes(Charset.forName("UCS-2"));
Log.d("MTINH",Arrays.toString(b));
这段代码已经在两种不同的设备上使用过,一种运行Android 8.0,另一种运行Android 8.1,我得到了两种不同的结果:
在 Android 8.0 中:
-1, -2, 48, 0, 57, 0, 51, 0, 50, 0, 51, 0, 48, 0, 48, 0, 48, 0, 57, 0, 48, 0
在 Android 8.1 中:
-2, -1, 0, 48, 0, 57, 0, 51, 0, 50, 0, 51, 0, 48, 0, 48, 0, 48, 0, 57, 0, 48
似乎结果是成对交换的:[-1 -2] vs [-2 -1]... [48 0] vs [0 48]。
那么这里的问题是什么? Java 或 Android 有什么变化吗?
【问题讨论】:
-
似乎是字节序问题。
-
@MinasMina 是的,这个问题与 ByteOrder LITTLE_ENDIAN & BIG_ENDIAN 有关
-
前两个字节是一个字节顺序标记(BOM),它指定了字节序。因此,即使字节流不同,对于接收方来说也不应该是问题。
标签: android string byte android-8.1-oreo