gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:43:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com