从二进制数据中提取某些位

use*_*817 2 java binary bit-manipulation extract bit

我有一个二进制数,看起来像这样:

00000000 00000000 00000011 00001101 = 781整数值=整数名称"已打包"

如何在java中使用bit wise提取每个值作为单独的整数值.如下:

int a = (function) = 00000000;
int b = (function) = 00000000;
int c = (function) = 00000011;
int d = (function) = 00001101;
Run Code Online (Sandbox Code Playgroud)

如果你能看到我在那里做什么..我希望前8个成一个整数,然后下一个整数,依此类推......我认为你在java中使用有点明智但我完全不确定.任何帮助表示赞赏.对不起,但我对这种事情全新,真的需要帮助,谢谢!基本上(函数)应该像这样:

packed >> 5; (I know this isn't nearly right that is why i am needing help on this)...
Run Code Online (Sandbox Code Playgroud)

这个问题在2天前得到了回答,它工作得非常好,但现在它已经破了......我不知道为什么......这里是我用来做这个的方法:

public static int getNthByte(int n, int packed) 
{
   // shift the desired bits into the last 8 bits
   int shifted = packed >> (8 * n);
   // and now get those bits
   int masked = 0x000000FF & shifted;
   return masked;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我把这行代码:我得到这个答案:

int x = 781;
System.out.println(getNthByte(3, x)); (Which should give me 00001101, in integer value)
Run Code Online (Sandbox Code Playgroud)

我打印以下内容:

0
Run Code Online (Sandbox Code Playgroud)

为什么?昨天这对我来说很好......但我注意到我做了:

System.out.println(getNthByte(5, x));
Run Code Online (Sandbox Code Playgroud)

它给了我第3位:

3
Run Code Online (Sandbox Code Playgroud)

这是正确的......

tl; dr这个方法昨天工作正常现在它搞砸了我需要帮助修复它或者可能是我的错误?我不知道..昨天我输入了getNthByte(3,x),它给了我与00001101相关的正确整数值...

任何帮助表示赞赏..也许该方法有问题?还是只是我?

fge*_*fge 5

在Java中,你必须处理二进制数据,你应该立即想到一个词ByteBuffer:

final ByteBuffer buf = ByteBuffer.allocate(4); // sizeof(int)
buf.putInt(yourInt);
Run Code Online (Sandbox Code Playgroud)

返回第n个字节现在很简单:

return (int) buf.get(byteIndex);
Run Code Online (Sandbox Code Playgroud)

请注意,您假设您的整数是大端序; 幸运的是,你说得对:Java就是这种情况.总是.无论底层架构的字节顺序如何.