我正在尝试编写一个方法,它接受一个32位的int和一个整数,表示32位int中的一个字节并返回传入的字节。即getByte(0x56781234,0); // => 0x34。我的思维过程是,如果我可以将int右移到我想要的字节是int的最后一个字节的位置,我可以和它以0xFF来获取该值。所以,像,
public int getByte(int num, int byteVal) {
return ((num >> 8) >> byteVal) & 0xFF;
}
我知道我的逻辑是有缺陷的。我试图在一个声明中多次转移。警告:没有乘法。建议吗?
您希望向右移动0,8,16或24,具体取决于byteVal的值。在你的例子中,即使byteVal为0,你也已经向右移动了8,所以这不是那样的。
那么,你怎么把0/1/2/3变成0/8/16/24 ....如果只有一个可以做到这一点的换档操作!
return (num >> (byteVal << 3)) & 0xFF;