Max*_*Max 4 java byte short byte-shifting
我试图将2个字节转换为短消息.这2个字节表示无符号短路,而后者又代表端口.我已经尝试了多种方法将这些字节转换为简短的java.但是,我经常无法正确地做到这一点.
这些是我尝试过的方法:
byte a = 0x17;
byte b = 0xCC;
(short)((a << 8) | b);
(short)(((short)a << 8) | b);
Run Code Online (Sandbox Code Playgroud)
结果是0xFFCC,但应该是0x17CC.
在Java中经历算术运算的任何值,首先被转换为可以覆盖两个操作数的更高类型.int如果它们仍然较小,则两个操作数都被强制转换.
结果,b首先被铸造int成为0xFFFFFFCC.或者向左移动8位的任何东西都会保留掩码0xFFFFFF00,因此对结果没有影响.将它转换为short只会缩小左边的16位.
要解决它,0xFF在执行操作之前显式屏蔽:
(short)(((a&0xFF)<<8)|(b&0xFF))
Run Code Online (Sandbox Code Playgroud)