Java计算字节数组位数的方法

标签 java arrays byte bit-manipulation

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

相关文章:

java - 如何修复此代码?将字符串从方法传递到 MainActivity

Java:带括号的整数相加

php - 从sql查询结果格式化数组

c# - 计算字节数组中位和的最快方法

Java:Linux 中的图形

java - 如何检查用户定义的(EditText)时间内某件事是否属实?

c - 二维数组C的快速输出

java - 在Java中的方法中返回两个数组

java - 在 Java 中从字符串创建字节类型

java - 无法读取特殊字符 (Java)