【问题标题】:How to Convert a float array to a byte[2] array and back java如何将浮点数组转换为字节 [2] 数组并返回 java
【发布时间】:2013-01-09 08:33:21
【问题描述】:

我将 DSP 效果应用于字节 [2] 数组格式的原始音频输入。要应用 DSP,我需要将字节数组转换为浮点数组并返回。要将字节数组转换为浮点数组,我使用以下代码:

private byte[] buffer;
/*
 * 
 * Converts a byte[2] to a float, in LITTLE_ENDIAN format
 */
private float getFloat(byte argB1, byte argB2) {
    return (float) (argB1 | (argB2 << 8));
}
for (int i = 0; i < N / 2; i++) { 
    curSample[i] = getFloat(buffer[i * 2],
    buffer[i * 2 + 1]);}

我需要将 curSample(它是一个浮点数组)转换回 byte[2] 数组。该怎么做?

【问题讨论】:

  • 浮点数是一个 32 位的值,它是怎么从两个字节转换成它的呢?可能您应该使用 floatToIntBits 将浮点数转换为字节数组。

标签: java


【解决方案1】:

要将字节数组转换为浮点数组,您所做的不考虑字节序。

int myInt = (byte[0] << 24) |
((byte[1] & 0xff) << 16) |
((byte[2] & 0xff) << 8) |
(byte[3] & 0xff);

或(对于小端):

int myInt = (byte[3] << 24) |
((byte[2] & 0xff) << 16) |
((byte[1] & 0xff) << 8) |
(byte[0] & 0xff);

然后您可以使用以下方法转换为浮点数:

float asFloat = Float.intBitsToFloat(asInt);

将其转换回字节数组

  int j=0;
  byte[] byteArray=new byte[4];
  int data=Float.floatToIntBits(asFloat);
  byteArray[j++]=(byte)(data>>>24);
  byteArray[j++]=(byte)(data>>>16);
  byteArray[j++]=(byte)(data>>>8);
  byteArray[j++]=(byte)(data>>>0);

我也找到了一些类似的资料here

【讨论】:

  • 在将一些 DSP 应用到asFloat...之后如何将浮点数转换回字节?
猜你喜欢
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多