Numpy from string(uint8和uint16的差异)[将两个uint8值组合成一个uint16值]

时间:2016-05-28 18:40:53

标签: java python numpy binary hex

我有一个Java语音文件,当我读AudioInputStream并将其转换为字节数组时,我得到-128127之间的值。我需要将这些值转换为-3276832767之间的范围。所以我认为我需要将Java数组中的每两个值组合成一个值。

在Python中,我可以读取文件,我可以通过numpy.fromstring函数将其转换为字符串。假设我将uint8值存储在B中的A,uint16值中。

A[2*i] = -50

A[2*i+1] = 21

B[i] = 5582

我有这样的价值观。不知何故,我认为我需要将A中的每两个值组合起来才能拥有B.我怎么能用Java做到这一点?

1 个答案:

答案 0 :(得分:0)

使用GitLab's documentation

byte[] b = { 37, -39, -112, -32, 123, -40, -114, 121 };
short[] s = new short[b.length / 2];
ByteBuffer buf = ByteBuffer.wrap(b);
// buf.order(ByteOrder.LITTLE_ENDIAN);
for (int i = 0; i < s.length; i++)
    s[i] = buf.getShort();
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(s));

输出(big-endian,默认值):

[37, -39, -112, -32, 123, -40, -114, 121]
[9689, -28448, 31704, -29063]

输出(little-endian,取消注释该行):

[37, -39, -112, -32, 123, -40, -114, 121]
[-9947, -8048, -10117, 31118]