每次进入某个循环时,我需要增加一个32位的值。但是,最终它必须采用字节数组(byte [])形式。最好的方法是什么?
选项1:
byte[] count = new byte[4];
//some way to initialize and increment byte[]
选项2:
int count=0;
count++;
//some way to convert int to byte
选项3:??
答案 0 :(得分:0)
您可以将int
转换为byte[]
,如下所示:
ByteBuffer b = ByteBuffer.allocate(4);
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN.
b.putInt(0xAABBCCDD);
byte[] result = b.array();
来源:Convert integer into byte array (Java)
现在是增量部分。您可以按照相同的方式递增整数。使用++
或任何需要。然后,清除ByteBuffer
,再次输入数字,flip()
缓冲区并获取数组
答案 1 :(得分:-1)
另一种便捷的方法是以下方法,该方法也可用于任意长度的字节数组:
byte[] counter = new byte[4]; // all zeroes
byte[] incrementedCounter = new BigInteger(1, counter).add(BigInteger.ONE).toByteArray();
if (incrementedCounter.length > 4) {
incrementedCounter = ArrayUtils.subarray(incrementedCounter, 1, incrementedCounter.length);
}
else if (incrementedCounter.length < 5) {
incrementedCounter = ArrayUtils.addAll(new byte[5-incrementedCounter.length], incrementedCounter);
}
// do something with the counter
...
counter = incrementedCounter ;
计数器将在2 ^ 32位后溢出。由于BigInteger也使用了符号位,因此可能有必要切断一个额外的前导字节(在代码中完成)。通过这种切割在这里处理溢出,并再次从0开始。
ArrayUtils
来自org.apache.commons
库。