Java 将具有位的数组转换为一个字节

Java 将具有位的数组转换为一个字节,java,Java,我想把8位转换成一个字节。位的表示方式是使用仅包含1或0的字节对象 如果我有一个包含这些位的8长度字节数组,如何将它们转换为一个字节 public byte bitsToByte(byte[] bits) { //Something in here. Each byte inside bits is either a 1 or a 0. } 有人能帮忙吗 谢谢公共静态字节位stobyte(byte[]位){ 字节b=0; 对于(int i=0;ii); 返回b; } 首先将数组中的每个位左移

我想把8位转换成一个字节。位的表示方式是使用仅包含1或0的字节对象

如果我有一个包含这些位的8长度字节数组,如何将它们转换为一个字节

public byte bitsToByte(byte[] bits) {
 //Something in here. Each byte inside bits is either a 1 or a 0.
}
有人能帮忙吗

谢谢

公共静态字节位stobyte(byte[]位){
字节b=0;
对于(int i=0;i<8;i++)
b |=(位[i]&1)>i);
返回b;
}

首先将数组中的每个
位左移1,然后将该位添加到
字节中

该实现基于以下假设:数组中的第一个
位是符号位,后面的位是字节从高到低位置的大小

public byte bitsToByte(byte[] bits) {
  byte value = 0;
  for (byte b : bits) {
    value <<=1;
    value += b;
  }
  return value;
}
输出:

45
45

字节
数组转换为
字节
值(顺序相同):

输出:

45
45

为什么不在有1的地方加上2的幂呢?它只是二进制的。你想把字节转换成比特吗?你的每一个比特本身就是一个
byte
类型,不要混淆Java数据类型和比特和字节的纯粹含义。你的意思是把这些位连在一起得到一个单字节格式吗?左移一只不过是乘以二;这将如何在字节中添加4和8?你不是要左移几位来建立正确的数字吗?如果你是从上面的例子中引用
4
(从右起的第三位)和
8
(从右起的第四位),那么这个值是由字节中的一位表示的。对每次我们有一点时间,我们都会做左移。我想这就是我正在做的。我希望我的理解是正确的。向下投票是提供反馈的好方法,但添加一些文字将使其成为最好的方法。否决票是提供反馈的好方法,但添加一些词语将使其成为最好的方法。依我拙见
  byte bits1[] = new byte[]{1,0,1,1,0,1,0,0};
  value = bitsToByte1(bits1);
  System.out.println(value);
45