我有字符串,它们总是十六进制,如“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/