1

我在此处或一般网络上找不到与 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
}

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

编辑 - 抱歉,伙计们,我说的完全不对。我正在执行加密分配,并被要求“使用带有密钥 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 中是正常的还是我可能做错了什么,我认为分组密码为加密和解密产生了相同大小的输入/输出。

4

2 回答 2

6

鉴于1 字节等于8 位,这是 Java 在 中定义的Byte.SIZE,我们可以这样写:

 public int bitsInByteArray(final byte[] b) {
     return b.length * Byte.SIZE;
 }
于 2012-10-26T20:17:14.627 回答
1

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

但是,如果你有一个其他类型的数组(ints、longs 等),那么你会有点卡住,因为 Java 没有 sizeOf 方法,它会给出给定类型的字节大小。

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

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

于 2012-10-26T20:18:59.733 回答