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

3ki*_*ngs 1 java binary bit-manipulation extract bit

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

00000000 00000000 00000011 00001101  =  781 integer value  = integer name "packed"
Run Code Online (Sandbox Code Playgroud)

如何在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)

谢谢!

rge*_*man 5

你是对的,这里需要按位操作.

首先,使用掩码仅隔离您感兴趣的位,关闭所有其他位:

value & 0xFF000000  // isolate most significant 8 bits
value & 0x00FF0000  // isolate next 8 bits
value & 0x0000FF00  // isolate next 8 bits
value & 0x000000FF  // isolate least significant  8 bits
Run Code Online (Sandbox Code Playgroud)

然后,位位移入最低位显著存储到a,b,c,和d(一个无符号的位位移):

(value & 0xFF000000) >>> 24 // Shift bits 24-31 to bits 0-7
(value & 0x00FF0000) >>> 16 // Shift bits 16-23 to bits 0-7
(value & 0x0000FF00) >>> 8  // Shift bits 8-15 to bits 0-7
(value & 0x000000FF)        // No need to shift the last one!
Run Code Online (Sandbox Code Playgroud)