我无法在这里或在网络上找到与此相关的有用答案。问题看似简单 - 我需要一种计算任意大小的字节数组中包含的位数的方法。字节数组可以包含十六进制,十进制或二进制值。
我确信这是在我看到答案时会让我自己踢的那些问题之一,但这证明非常令人沮丧。该方法应如下所示:
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
}
任何方向或建议都会受到极大的赞赏。
编辑 - 道歉的人,我根本没有说出这一点。我正在进行加密分配,并被要求“使用带密钥k的AES加密包含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中是正常的还是我可能做错了什么,我认为分组密码为加密和解密产生了相同大小的输入/输出。
答案 0 :(得分:4)
1 byte = 8 bits.
因此
public int bitsInByteArray(byte[] b) {
return b.length*8;
}
答案 1 :(得分:1)
正如其他人已经说过的那样,如果它是一个字节数组,那么答案是将长度乘以8,因为一个字节总是100%保证为8位。
但是,如果你有一个其他类型的数组(整数,长整数等),那么你就会陷入困境,因为Java没有sizeOf方法,这会给出给定类型的字节大小。< / p>
这些类型现在通常都是标准化的,但当然它们*仍然可能因地而异(这是极不可能的),所以你无法保证它们占据了多少内存。
这是家庭作业吗?如果不是......你可能做错了,如果你问这个关于java的问题。