如何在Java中屏蔽字节值?

bun*_*ath 1 java byte masking bitwise-and

我的问题是这样的.

我在Java中有一些字节计算.在某些计算中,我在字节值中得到了我想要的结果"2a",但在某些计算中,我得到字节值为"ffffff9a".我只想从结果"ffffff9a"中输入"9a"值.我尝试了这个,但没有奏效.

byte a = (byte) b & 0xff;
Run Code Online (Sandbox Code Playgroud)

其中b的值为"ffffff9a"字节值.

但是显示相同的过程就像

System.out.println(Integer.toHexString(b & 0xff));
Run Code Online (Sandbox Code Playgroud)

我哪里错了?我能做些什么来获得我想要的价值?

谢谢


实际上我试图将8位字符转换为gsm 7位.如果有人可以帮我解决这个问题,那也会有所帮助.字符串存储为字节数组,我必须将此字符串或8位字节转换为7位.

小智 7

byteJava中的类型已签名.它的范围是[-128,127].

System.out.println(Integer.toHexString(a & 0xff)); // note a, not b
Run Code Online (Sandbox Code Playgroud)

将显示"正确的值",即使a是类型byte,将包含负值((byte)0x92).也就是说,(int)a == 0x92将是假的,因为演员int 保持价值,负面和所有,而(a & 0xff) == 0x92将是真实的.这是因为逐位&将表达式提升为int类型,同时"屏蔽掉""符号位"(不是真正的符号位,而是两个补码的伪影).

请参阅:Java如何"隐藏"字节

快乐的编码.