将一个字节拆分成位

时间:2012-03-10 11:55:45

标签: java android byte

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

2 个答案:

答案 0 :(得分:5)

好吧,按位操作似乎几乎就是你所说的。 一个字节由8位组成,因此它的范围为0到255。 用二进制文件写的00000000到11111111。

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

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

如何执行此操作是通过定义一些掩码。获取前半个字节值的掩码为0000 1111。 取值为11010011,将bitwise和(&)运算符应用于它。 所以说字节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个。

了解更多信息,请查看relevant wiki

对不起,这些值有些偏差(因为字节似乎从-128到127,但想法是一样的。

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

答案 1 :(得分:2)

boolean a = (theByte & 0x1) != 0;
boolean b = (theByte & 0x2) != 0;
boolean c = (theByte & 0x4) != 0;
boolean d = (theByte & 0x8) != 0;
boolean e = (theByte & 0x10) != 0;
boolean f = (theByte & 0x20) != 0;
boolean g = (theByte & 0x40) != 0;
boolean h = (theByte & 0x80) != 0;