【问题标题】:reverse order of items in a Java byte[] arrayJava byte[] 数组中项目的倒序
【发布时间】:2017-10-12 17:10:54
【问题描述】:

我在正确反转字节数组中的项目顺序时遇到问题。我想将以下字符串翻转为以下字符串:

原版“\u042F\u0490\u0418\u0432\u0435\u0442”

翻转“\u0442\u0435\u0432\u0418\u0490\u042F”

我尝试过类似的方法,但这不起作用。

public byte[] invert(byte[] input) {
    ByteBuffer bb = ByteBuffer.wrap(input);
    bb.order(ByteOrder.LITTLE_ENDIAN);
    byte[] b = bb.array();
    return b;
}

有什么想法吗?

【问题讨论】:

  • 您的示例表明您希望反转字符(与字节序无关)而不是反转字节。请注意,字符是 16 位,而字节是 8 位。您在这里的实际最终目标是什么?
  • 我明白了,所以我必须每 2 个字节恢复一次?

标签: java arrays utf-8 reverse


【解决方案1】:

这将完成您的示例显示您正在寻找的内容:

String reversed = new StringBuilder(str).reverse().toString();

您可能需要将byte[] 解码为String,然后使用正确的字符编码将反转的String 编码回byte[]

【讨论】:

  • 请注意,此答案透明地处理代理。好的。我不知道reverse() 方法!
【解决方案2】:

不要试图将 Unicode 字符视为字节!最简单的方法是创建一个字符串 (String(byte[])) 获取字符 (String.toCharArray()) 并将它们以相反的顺序写入 char[],然后再次通过字符串返回字节数组。

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2020-06-30
    • 2017-12-15
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多