java - 十六进制表示占用的空间超出应有的空间

标签 java encoding character-encoding hex byte

我有字符串,它们总是十六进制,如“FF”、“BB”、“AA”等。 我对编码内容做了一个小实验,看起来十六进制所占用的字节数是字符串表示形式中这些内容的两倍。

我的代码是这样的:

        String hex ="FF";

        byte[] b = hex.getBytes();
        String enc = base16().encode(hex.getBytes());
        byte[] c = enc.getBytes();

我正在使用 Guava utils 来完成编码工作。

它显示为hex,占用两个字节,因此b的长度为2。 然后我将其编码为十六进制。 “FF”十进制为255,因此需要占用1字节。但 enc 现在是 4 个字节,等于 "4646"

接下来,c 是 4 个字节。

我不明白 enc 的生成点。我希望 c 占用 1 个字节。有人可以提供一些线索吗?

谢谢!

最佳答案

getBytes() method不做你认为它做的事。它不会将其解析为十六进制数;而是将其解析为十六进制数。它给出了字符编码。字符 F 是数字 70,因此 hex.getBytes() 会为您提供一个由 'F', ' 组成的两字节数组F'70, 70

Encodes this String into a sequence of bytes using the platform's default charset, storing the result into a new byte array.

要将其解析为十六进制数,可以使用基数为 16 的 Integer.parseInt

byte[] c = { (byte) Integer.parseInt(hex, 16) };

Integer.parseInt 用于代替 Byte.parseByte,因为 FF 对于有符号字节来说太大。

输出:

[-1]

关于java - 十六进制表示占用的空间超出应有的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25771951/

相关文章:

java - 从 Java 运行 Windows 命令行

java - 如何同时捕获两个异常作为一个单独的案例?

c# - Windows Phone 使用 NSpeex 编码和解码音频。解码有问题?

json - 如何将字符串编码/解码为 gson

java - Java 字符 reverseBytes 中的问题

Java:如何知道 jar 位于 Linux 中的位置

Java:for循环忽略条件

html - libxml2 -> HTMLparser.h -> htmlReadMemory 中编码的可能值是什么

php - 蛋糕PHP : How to save Arabic words into mysql table?

c# - 无法将土耳其语字符从文本文件读取到字符串数组