将位的字符串表示形式转换为字节

2024-04-13

我刚刚开始学习文件压缩,但遇到了一些障碍。我有一个应用程序将诸如“程序”之类的字符串编码为压缩的二进制表示形式"010100111111011000"(请注意,这仍然存储为字符串)。

Encoding
g       111
r       10
a       110
p       010
o       011
m       00

现在我需要使用将其写入文件系统FileOutputStream,我遇到的问题是,如何将字符串“010100111111011000”转换为byte[]/bytes 写入文件系统FileOutputStream?

我以前从未使用过位/字节,所以我在这里陷入了死胡同。


移位运算符简介:

首先,我们有左移运算符,x << n。这将移动所有位x留下来n位,用零填充新位:

      1111 1111 
<< 3: 1111 1000

接下来,我们有符号右移运算符,x >> n。这会移动所有位x右移 n,将符号位复制到新位中:

      1111 1111 
>> 3: 1111 1111

      1000 0000
>> 3: 1111 0000

      0111 1111 
>> 3: 0000 1111

最后,我们有零填充右移运算符,x >>> n。这会将所有位移入x就在n位,用零填充新位:

       1111 1111 
>>> 3: 0001 1111

您可能还会发现按位或运算符很有用,x | y。这比较了每个位置的位x and y,如果新号码的位在任一中已打开,则将其设置为打开x or y,否则关闭:

  1010 0101
| 1010 1010
  ---------
  1010 1111

您应该只需要前面的运算符来解决手头的问题,但为了完整起见,这里是最后两个:

按位与运算符,x & y当且仅当两个中的该位均打开时,才将输出中的位设置为 1x and y:

  1010 0101
& 1010 1010
  ---------
  1010 0000

按位异或运算符,x ^ y如果该位在一个数字或另一个数字中打开,但不是同时打开,则将输出位设置为 1:

  1010 0101
^ 1010 1010
  ---------
  0000 1111

现在,将这些应用到当前的情况:

您将需要使用位移运算符来添加和操作位。开始根据字符串表示在右侧设置位并将它们移过来。继续,直到到达一个字节的末尾,然后移至下一个字节。假设我们要创建“1100 1010”的字节表示:

Our byte    Target
---------   --------
0000 0000
            1100 1010
0000 0001   ^
            1100 1010
0000 0011    ^
            1100 1010
0000 0110     ^
            1100 1010
0000 1100      ^
            1100 1010
0001 1001        ^
            1100 1010
0011 0010         ^
            1100 1010
0110 0101          ^
            1100 1010
1100 1010           ^

当然,我会留给您将其应用到您的工作中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将位的字符串表示形式转换为字节 的相关文章

随机推荐