我们所有人都知道Integer数据类型可以存储直到4个字节的值,即32位
例如,如果我们有
int a = 2;
它表示a = 00000000 00000000 00000000 00000010
有没有办法使用剩余的位并在其中存储值并在需要时将其取出?
让我再举一个例子:
我们有一个仅使用英文字母和数字(26 + 10)的计算机系统,所以它们的总和为36
。
就像当我们在计算机中拥有256个字符并且log_2(256) = 8 bits
并且我们使用8位来存储值时一样
log_2(36)
= 6位
这意味着6位就足够了。
这是问题:
如何仅使用三个字节在其中存储4个字符?
基于log2(36) = 6
此photo可以更好地展示这个想法
答案 0 :(得分:1)
Base64编码正是您想要的,并且具有Java实现。来自维基
每个Base64位代表6位数据。因此,可以用四个6位Base64数字来表示三个8位字节(即总共24位)。
Java8的文档包括Base64 here。
要特别回答您的问题,您可以使用bit shifting和自定义的二进制编码将四个字符填充为三个字节。
例如,如果您要将字母和数字的小写字母编码为六位代码
Symbol | Decimal | Binary
0 | 0 | 000000
1 | 1 | 000001
...
f | 16 | 010000
...
o | 25 | 011001
...
z | 35 | 100011
...
EOF | 63 | 111111
然后,字符串foof
可以写为010000 011001 011001 010000
。大多数语言都希望将其表示为三个字节,即01000001 10010110 01010000
。这是A搀
,使用utf-8二进制编码;如果您将它们表示为Java中的-63 22 -48
类型,则使用byte
。
我对Java并不十分熟悉,但是我知道有several资源可用于C语言和其他语言,以读取某些字节流的确切位值。