正文
java 中2个字节拼成 short 类型的值,如果用下面的函数,那就错咯,看起来很简单。
- public static short getShort(byte argB1, byte argB2) {
- return (short) (argB1| (argB2 << 8));
- }
原因是argB1 会先被转成short 类型,这样如果它是负数,符号位会被扩展。
例如,它是0x80, 它会先被转成short 类型的值 0xFF80, 显然在接下来的或运算中会导致错误。
所以正确的应该是下面的函数表达的算法。
public staticshort getShort(byte argB1,byte argB2) {
return (short) ((argB1 & 0xFF)| (argB2 << 8));
}