gpt4 book ai didi

java - 将 float 组有效转换为字节数组

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

这个问题可能以前有人问过,但我找不到完全匹配的问题,所以我会尝试一下。

我想以单个float的方式将float[]转换为byte[](会丢失信息)等),这意味着我只想保留数组中每个 float 的最后 8 位。我发现了一些涉及 ByteBuffer 的代码,但这种方法将每个 float 的所有 32 位转换为 4 个字节(每个字节 8 位),这不是所需的输出(如果有人感兴趣,链接是 http://www.javalobby.org/java/forums/t18962.html )

我没有找到任何用于此转换的代码,因此我只使用了经典的 for 循环:

public static byte[] float2ByteArray(float floatArray[]) {
byte[] byteArray = new byte[floatArray.length];
for(int i = 0; i < floatArray.length; i++) {
byteArray[i] = (byte) floatArray[i];
}
return byteArray;
}

我的问题是是否有更有效的方法来达到我不知道的相同结果?

最佳答案

您使用循环的一般方法就是要走的路。人们可能会修改循环结构(展开等)以获得更好的性能几个百分点,但这通常是您只想在功能开发的最后阶段烦恼的事情(如果有的话)。

这里更重要的问题是,您没有检查 float 是否适合到一个字节中。由于 java 对数据类型小于 int 的操作的(有些特殊)语义,强制转换:

byte b = (byte) floatValue;

当浮点值超出字节范围时,可能会导致非常丑陋的意外。因为隐式地这种转换的工作原理如下:

int i = (int) floatValue;
byte b = (byte) i;

而且并不是您直观所期望的。如果 floatValue 适合 int,而不是字节,则最终的字节值将是截断的 int 值。例如:

float f = 256F;
byte b = (byte) f;

结果字节值为 0(),而不是通常预期的 127。请注意这一点,并在转换之前相应地舍入/修剪您的浮点值。

就性能而言,float -> int/byte 转换是迄今为止成本最高的操作(每个元素)。

关于java - 将 float 组有效转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23807219/

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