用于计数字节数组中位数的Java方法

Saf*_*Saf 1 java arrays byte bit-manipulation

我在这里或一般在Web上找不到关于Java的有用答案。这个问题看似很简单-我需要一种计算任意大小的字节数组中包含的位数的方法。字节数组可以容纳十六进制,十进制或二进制值。

我确信这是我看到答案时会踢自己的那些问题之一,但事实证明,这令人非常沮丧。该方法应类似于:

public int bitsInByteArray(byte[] b) {
    return - sum of bit count (ie the sum total bits, not the sum of their values) 
    of each byte in b
}
Run Code Online (Sandbox Code Playgroud)

任何方向或建议将不胜感激。

编辑-抱歉,我根本没说这句话。我正在做一个加密分配,并且被要求“使用AES用密钥k加密包含64个零位的单个块”现在,我创建了byte [] zeroBlockAes = {0x0,0x0 ... 0x0},直到包含64个零元素。问题是,这肯定是512位吗?那我应该只输入八个零值吗?

执行此操作时,我的加密输出为-75 111 69 107 -18 88 51 89 68 -123 -49 18 -26 -109 94 21

当我再次解密时,我得到了原始的八个零。在AES中这是正常现象还是我可能做错了什么,我认为分组密码为加密和解密产生了相同大小的输入/输出。

Yog*_*ngh 5

   1 byte = 8 bits.
Run Code Online (Sandbox Code Playgroud)

因此

   public int bitsInByteArray(byte[] b) {
       return b.length*8;   
   }
Run Code Online (Sandbox Code Playgroud)