gpt4 book ai didi

java - 如何将存储在 byte[] 数组中的两个 8 字节数字相加

转载 作者:行者123 更新时间:2023-12-01 17:55:53 33 4
gpt4 key购买 nike

如果字节值按 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com