如何在Java中反转无符号字节的位?

2022-09-02 12:25:09

我正在尝试为一种非常简单的加密类型编写解码器。0-255之间的数字通过扫描仪输入,位反转,然后转换为字符并打印。

例如,数字 178 应转换为字母“M”。

178是10110010。

反转所有位应该给出01001101,即77或“M”作为字符。

我遇到的主要问题是,据我所知,Java不支持无符号字节。我可以将值读取为int或短整型,但是由于额外的位,这些值在转换过程中将被关闭。理想情况下,我可以只使用按位补码运算符,但我认为如果我用有符号数字执行此操作,我最终会得到负值。关于我应该如何处理这个问题的任何想法?


答案 1

我会简单地使用那些补码,并通过使用二进制和来摆脱其他位。

public class Conv {
    public static void main(String[] args) {
        int val = 178;
        val = ~val & 0xff;
        System.out.println((char) val);
    }
}

答案 2
~n & 0xff

~做补码并隐式转换为整数,就像所有数值运算一样,然后屏蔽除较低8位之外的所有内容,以获得无符号值,再次作为整数。& 0xff

我首先以不同的方式阅读您的问题,以反转顺序而不是位的值,这就是答案。

您可以使用 Integer.reverse() (未经测试):

Integer.reverse(n << 24) & 0xff