将一个字节拆分成位

sur*_*raj 2 java android byte

我有一个字节数组,即从byte [0]到byte [2].我想先将byte [0]分成8位.然后是bytes [1],最后是bytes [2].通过分裂我的意思是如果byte [0] = 12345678然后我想分裂为变量A = 8,变量B = 7,变量C = 6,变量D = 5,........变量H = 0 .如何拆分字节并将位存储到变量中?我想在JAVA中这样做

vla*_*ean 5

好吧,按位操作似乎几乎就是你所说的.一个字节由8个比特,如此这般在0至255写成二进制这是00000000 11111111风靡一时.

按位运算是那些基本上使用掩码从一个字节中获取尽可能多的信息的操作.

比如说你有1101 0011字节(仅为可见性添加空间)= 211(十进制).您可以将其拆分为2个"变量"b1和b2,每个半个字节.因此它们将覆盖0到15的范围.

如何做到这一点是通过定义一些掩码.获取前半个字节值的掩码将为0000 1111.您将值11010011应用于按位和(&)运算符.所以说字节b = 211; byte mask1 = 15; 或字节b = 0x11010011; byte mask1 = 0x00001111; 然后你有你的变量字节b1 = b&mask1;

因此,应用该操作将导致b1 = 00000011 = 3; 带掩码字节mask2 = 0x11110000; 在b上应用相同的操作,你得到字节b2 = mask2&b = 0x11010000;

现在当然,数字b2可能对你来说太大了.如果你想获取值0x1101,你需要做的就是右移它.因此b2 >> = 4;

您可以使用任何形式的掩码,但通常将它们以十进制表示为2的幂(以便您可以从字节中取出任何位)或确定变量所需的范围并使掩码"更大" "像0x00000011,或ox00001100.这两个掩码将分别从一个字节中获取2个值,每个值的范围从0到3,这些值可以在一个字节内容纳4.

欲了解更多信息,请查看相关维基.

对不起,值有点偏离(因为字节似乎从-128到127,但想法是一样的.

第二次编辑(从未使用过按位操作lol)..."0x"符号用于十六进制.所以你实际上必须自己计算01001111实际意味着什么...非常糟糕:| 但它会做的伎俩.