作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果字节值按 0-127 递增,则 -128 变为 0,然后递增下一个有效位。如何将两个 8 字节数字相加?
5824 samples = 0 0 0 0 0 0 22 -64
6272 samples = 0 0 0 0 0 0 24 -128
-----------------------------------
12096 samples = 0 0 0 0 0 0 47 64
5824 samples + 6272 samples = 12096 samples
我使用以下代码递增字节数组:
public static byte[] byteIncrement(byte[] array) {
byte[] r = array.clone();
for ( int i = array.length - 1; i >= 0; i-- ) { // LSB to MSB
byte x = array[ i ];
if ( x == -1 )
continue;
r[ i ] = (byte) (x + 1);
Arrays.fill( r, i + 1, array.length, (byte) 0 );
return r;
}
throw new IllegalArgumentException( Arrays.toString( array ) );
}
例如,当我将此字节数组增加 5284 次时,我得到上面给出的 5824 个样本的值:
byte[] array = {(byte) (0), (byte) (0), (byte) (0), (byte) (0), (byte) (0), (byte) (0), (byte) (0), (byte) (0)};
byte[] incrementedarray = byteIncrement(array);
for(int k=1;k<=5823;k++) { // 5824 samples for 1st page
incrementedarray = byteIncrement(incrementedarray);
}
所以我的问题是,如何以上述方式添加这样的 8 字节(64 位)数字。我使用字节数组是因为 OGG 音频比特流中的颗粒位置是以这种方式存储的。我正在尝试组合两个比特流,为此我必须进行此类加法。
最佳答案
您可以使用BigInteger
来处理数学:
public static byte[] add(byte[] arr1, byte[] arr2) {
return new BigInteger(arr1).add(new BigInteger(arr2)).toByteArray();
}
如果结果需要为特定大小,可以将其复制到目标大小的新数组中:
private static byte[] leftPad(byte[] arr, int size) {
if (arr.length < size) {
byte[] padded = new byte[size];
System.arraycopy(arr, 0, padded, size - arr.length, arr.length);
return padded;
}
return arr;
}
关于java - 如何将存储在 byte[] 数组中的两个 8 字节数字相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814313/
我是一名优秀的程序员,十分优秀!