首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串内容解析为二进制,然后在Java中转换为String

将字符串内容解析为二进制,然后在Java中转换为String
EN

Stack Overflow用户
提问于 2016-02-08 07:04:03
回答 1查看 3K关注 0票数 0

我需要将字符串内容解析为二进制序列,并将它们转换为它的UTF-8等效字符串。

例如,UTF-8BAR的二进制等价物如下:

B = 01000010

A = 01000001

R = 01010010

现在,我需要将字符串"010000100100000101010010"转换为字符串"BAR"

,即对于上述24个字符的大小写输入字符串的,被划分为三个相等的部分(每个部分8个字符),并转换为它的UTF-8等效为字符串值。

样本代码:

代码语言:javascript
复制
public static void main(String args[]) {
    String B = "01000010";
    String A = "01000001";
    String R = "01010010";
    String BAR = "010000100100000101010010";

    String utfEquiv = toUTF8(BAR);//expecting to get "BAR"
    System.out.println(utfEquiv);
}

private static String toUTF8(String str) {
    // TODO 
    return "";
}

方法toUTF8(String str){}的实现应该是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 07:18:01

您应该将其分为两个问题:

  • 通过解析二进制值将字符串转换为字节数组
  • 使用UTF-8将字节数组转换回字符串。

后者使用new String(bytes, StandardCharsets.UTF_8)非常简单。

对于第一部分,棘手的部分是Byte.parseByte不会自动处理前导1.因此,我可能会将每个8位字符串解析为一个short,然后转换为byte

代码语言:javascript
复制
public static byte[] binaryToBytes(String input) {
    // TODO: Argument validation (nullity, length)
    byte[] ret = new byte[input.length() / 8];
    for (int i = 0; i < ret.length; i++) {
        String chunk = input.substring(i * 8, i * 8 + 8);
        ret[i] = (byte) Short.parseShort(chunk, 2);
    }
    return ret;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35264002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档