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

时间:2012-10-26 20:14:51

标签: java arrays byte bit-manipulation

我无法在这里或在网络上找到与此相关的有用答案。问题看似简单 - 我需要一种计算任意大小的字节数组中包含的位数的方法。字节数组可以包含十六进制,十进制或二进制值。

我确信这是在我看到答案时会让我自己踢的那些问题之一,但这证明非常令人沮丧。该方法应如下所示:

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中是正常的还是我可能做错了什么,我认为分组密码为加密和解密产生了相同大小的输入/输出。

2 个答案:

答案 0 :(得分:4)

   1 byte = 8 bits.

因此

   public int bitsInByteArray(byte[] b) {
       return b.length*8;   
   }

答案 1 :(得分:1)

正如其他人已经说过的那样,如果它是一个字节数组,那么答案是将长度乘以8,因为一个字节总是100%保证为8位。

但是,如果你有一个其他类型的数组(整数,长整数等),那么你就会陷入困境,因为Java没有sizeOf方法,这会给出给定类型的字节大小。< / p>

这些类型现在通常都是标准化的,但当然它们*仍然可能因地而异(这是极不可能的),所以你无法保证它们占据了多少内存。

这是家庭作业吗?如果不是......你可能做错了,如果你问这个关于java的问题。