我无法在此处或一般网络上找到与 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
}
任何方向或建议将不胜感激。
编辑 - 抱歉,伙计们,我根本没有说对。我正在做一个加密分配,并被要求“使用带有 key k 的 AES 加密包含 64 个零位的单个 block ” 现在,我创造了 byte[] zeroBlockAes = {0x0,0x0...0x0} 直到它包含 64 个零元素。 问题是,这肯定是512位吧?那么我应该只输入八个零值吗?
当我这样做时,我的加密输出是 -75 111 69 107 -18 88 51 89 68 -123 -49 18 -26 -109 94 21
当我再次解密时,我得到了原来的八个零。这在 AES 中是正常的还是我可能做错了什么,我认为 block 密码为加密和解密产生相同大小的输入/输出。
最佳答案
鉴于 1 字节 等于 8 位,这是 Java 在 Byte.SIZE
中定义的,我们可以这样写:
public int bitsInByteArray(final byte[] b) {
return b.length * Byte.SIZE;
}
关于Java计算字节数组位数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13093800/