首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在java中实现与给定JS实现相同的字符串转换Base64到十六进制?

如何在java中实现与给定JS实现相同的字符串转换Base64到十六进制?
EN

Stack Overflow用户
提问于 2020-10-29 10:55:14
回答 2查看 88关注 0票数 0

我正在尝试实现从Base64到Hex的字符串转换,这必须产生与本网站相同的结果。这意味着,例如(Base64: bACAAAAAAAA=)被解译为(十六进制:6c008000000000)。这一实现产生正确的输出。所以我试着用Java实现等价的

代码语言:javascript
运行
复制
    private static String base64ToHex(String input) {
        byte[] raw = Base64.getDecoder().decode(input.getBytes());
        String result = "";
        for (int i = 0; i < raw.length; i++) {
            String hex = Integer.toString(raw[i], 16);
            result += (hex.length() == 2 ? hex : '0' + hex);
        }
        return result.toUpperCase();
    }

不幸的是,这并没有提供所需的输出。所以你能告诉我我错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-29 11:12:19

尝试下面-你需要解码,而不是编码。只考虑解码后的值,忽略符号部分。也就是说,使用Math.abs()只取绝对值。

代码语言:javascript
运行
复制
           private static String base64ToHex(String input) {
            byte[] raw = Base64.getDecoder().decode(input.getBytes());
            String result = "";
             for (int i = 0; i < raw.length; i++) {
                  String hex = Integer.toString(Math.abs(raw[i]), 16);
                  result += (hex.length() == 2 ? hex : '0' + hex);
              }
            return result.toUpperCase();
          }
票数 2
EN

Stack Overflow用户

发布于 2020-10-29 11:32:56

代码语言:javascript
运行
复制
     private static String base64ToHex(String input) {
         byte[] raw = Base64.getDecoder().decode(
                input.getBytes(StandardCharsets.US_ASCII));
         StringBuilder result = new StringBuilder(raw.length * 2);
         for  (byte b : raw) {
              result.append(String.format("%02X", b & 0xFF));
         }
         return result.toString();
     }

问题是,java byte被签名了,因此出现了掩蔽& 0xFF

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64589689

复制
相关文章

相似问题

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