如何使用字节的剩余位在其中存储值?

时间:2018-11-29 12:14:25

标签: java memory char integer

我们所有人都知道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可以更好地展示这个想法

1 个答案:

答案 0 :(得分:1)

Base64

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语言和其他语言,以读取某些字节流的确切位值。