首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >扩展ascii的base64编码

扩展ascii的base64编码
EN

Stack Overflow用户
提问于 2018-06-02 02:47:16
回答 1查看 1.3K关注 0票数 1

我正在从IoT设备接收二进制文件。我正在尝试将由最多13个字节的列表组成的一些标识符转换为尽可能小的可读字符串。

为此,我将其解码为Base64,然后将字节转换为十六进制,以便

代码语言:javascript
复制
     `byte[] bytes = {0x24, 0x54, 0x4b, 0x00, 0x31, 0x00, 0x0e, 0x50, 0x33, 0x42, 0x58, 0x35};` 

变成了

4CAD4FDC15F9

但是,当我在扩展ascii中接收字节(在调试器中,字节显示为负值)时,转换为base64将返回一个空字节数组。

我一直在使用org.apache.tomcat.util.codec.binary.Base64,它在文档中提到它没有考虑文档中提到的扩展ASCII码:

因为这个类直接操作字节流,而不是字符流,所以它被硬编码为*编码/解码字符编码,这些字符编码与较低的127个ASCII图表(-8859-1、Windows-1252、* UTF-8等)兼容。

我也尝试过java.util.Base64,它处理第一个字节数组,并在第二个字节数组中抛出异常

代码语言:javascript
复制
public static String getBase64HexDeviceIdFromSerialBytes(byte[] serial) {
    byte[] base64Bytes = java.util.Base64.getMimeDecoder().decode(ArrayUtils.subarray(serial, 0, 12));
    String hex = BytesUtils.bytesToHex(base64Bytes);
    return hex;
}

main ERROR com.trackener.backend.api.device.service.DeviceService 19:39:31.946 main ERROR java.util.Base64$Decoder.decode0(Base64.java:734) - message processing failed java.lang.IllegalArgumentException: Last unit at java.util.Base64$Decoder.decode(Base64.java:526)没有足够的有效位

如何使用扩展ascii中的特殊字符实现从字节到这个小base64字符串的转换?如果我可以用另一种方法(从字节数组中获得一个字符尽可能少的唯一代码),我也会很高兴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-02 03:19:28

你混淆了编码和解码。如果您有想要以“安全”形式存在的二进制数据(8位字节),则需要将它们编码为base64。

代码语言:javascript
复制
public static String getBase64HexDeviceIdFromSerialBytes(byte[] serial) {
    return java.util.Base64.getEncoder().encodeToString(ArrayUtils.subarray(serial, 0, 12));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50649419

复制
相关文章

相似问题

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