【问题标题】:How to convert short array to byte array? [duplicate]如何将短数组转换为字节数组? [复制]
【发布时间】:2013-05-31 07:36:47
【问题描述】:

我正在处理音频,我将音频数据保存在短数组中。我想将其转换为字节数组来存储 wav 文件。我不知道将 short[] 转换为 byte[]。你能帮助我吗。 非常感谢。

【问题讨论】:

  • 非常感谢。我会试试这段代码: private byte[] shortArrayToByteArray(short[] shortArr) { int index; int 迭代次数 = shortArr.length; ByteBuffer bb = ByteBuffer.allocate(shortArr.length * 2); for(index = 0; index != 迭代次数; ++index){ bb.putShort(shortArr[index]); } 返回 bb.array(); }
  • 如果您使用 ByteBuffer,请确保您的系统的字节顺序正确。默认为大端,但许多格式使用小端。
  • 哦,非常感谢,我要创建little-endian。

标签: java audio


【解决方案1】:

short 是 16 bit 类型,byte 是 8 bit 类型。因此,从n 长度短数组中,您将获得2n 长度字节数组。

基础知识

在转换数组之前关于将单个短字节转换为字节的事情。因此,根据上面的行,您将从单个短中创建 2 个字节。

原理是将前 8 位存储两个字节,并将后 8 位存储到另一个短字节。代码会是这样的

byte b1, b2;
short s;

b1 = s & 0xff;
b2 = (s >> 8) & 0xff;

现在数组

现在将上述主体用于数组。说short的数组大小是n。让短是s

byte result[2*n];
for(int i = 0; i<2*n ; i=i+2){
    b[i]   = s[i>>1] & 0xff;
    b[i+1] = (s[i>>1 | 1] >> 8) & 0xff;
}

使用 ByteBuffer 类

您还可以使用 ByteBuffer 类将短数组转换为字节数组。

ByteBuffer byteBuf = ByteBuffer.allocate(2*n);
for(int i = 0; i<n ; i++) {
    byteBuf.putShort(buffer[i]);
}

【讨论】:

  • 你忘了字节序
  • 还有签名。这将严重破坏您的数据,您至少应该使用&gt;&gt;&gt;
  • @icepack 例如,我使用了小端序。问题的主要目标不是为他制作一个字节数组。而是给他一个概念。我错了吗?
【解决方案2】:

唯一的办法就是创建一个与短数组大小相同的字节数组,并复制短数组元素

【讨论】:

  • 非常感谢,我正在测试一些代码..
猜你喜欢
  • 2012-06-04
  • 2011-08-24
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多