【发布时间】:2016-05-22 14:47:57
【问题描述】:
我有以下二维int数组:
int[][] array = new int[128][128];
这个二维数组只包含 zeros 和 ones。我想读取每一行并从其内容中创建一个byte[](字节数组)。例如,假设第一行是:0101111000111...101,由 128 个数字组成。我希望这条线是 128 位的 byte[](这意味着 16 个字节)。
将每一行转换为字节数组的最有效方法是什么? 请记住,保持大小重要 。由于每行包含 128 个“位”,因此字节数组的大小应为 16 个字节 (128/8)。
我想过如何做到这一点的一种方法是将每一行变成一个 BigInteger,然后将其转换为字节数组,但不幸的是我无法产生正确的结果。我还尝试了 StackOverflow 可用的其他一些选项,但无济于事。例如this 解决方案产生的输出为 512,我不明白为什么。
由于上述原因,我不认为这篇文章是重复的,因为各种问题和答案都没有考虑到字节数组的大小及其与 int 数组的相关性。
【问题讨论】:
-
至于您的示例解决方案:512 = 128 * 4 和
int是 4 个字节长。该解决方案只是从int中获取所有字节。你想要另一种转变,所以你必须使用另一种方法。 -
你能保证你的第一个数组总是8的倍数吗?
-
@Paul 既然你提到了它就说得通了。
-
@AndrewWilliamson 确实是一个重要的问题。 是的,我可以保证。大小总是能被 8 整除。
-
所以结果应该是
byte b[][] = new byte[128][16],对吧? (而不是byte b[] = new byte[128*16]...)
标签: java arrays multidimensional-array bytearray