gpt4 book ai didi

c++ - 如何将 char 数组转换为 float 数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:27 24 4
gpt4 key购买 nike

为了训练分类器,需要使用一组 float 组指定训练数据。不幸的是,我可用的训练数据是字节数组(实际上它们是 Ipp8u 数组,可以转换为 unsigned char 数组)。

本质上,给定一个 unsigned char 数组,我需要将其转换为 float 数组:换句话说,给定一个 unsigned char 数组,我应该将其读取为 float 数组。是否始终允许此操作? float 数据类型是否允许所有可能的位配置?如果是,如何实现这个转换?

最佳答案

有很多方法可以逼近实数。有浮点表示,其中一些位表示指数,其他一些位表示系数,有定点表示,其中一些位表示整数部分,一些位表示小数部分,还有任意有限精度表示,其中一些数字某些基数中的“数字”被存储等,并且对于每个一般的表示类,在将该表示转换为 float 时,这些细节会很重要。

您的问题没有指定字节数组包含什么表示形式。指定数组为 Ipp8u没有提供必要的信息。


您的意思可能是字节数组包含机器对 float 的 native 表示的字节表示。 s(可能是 IEEE-754),最多在字节顺序上有所不同。

您可以简单地对 char 中的数据进行 memcpy数组转换为 float 数组:

char c[10 * sizeof(float)] = {...};
float f[10];
std::memcpy(f, c, 10 * sizeof(float)); // or you can search for an implementation of bit_cast

不要做的一件事就是简单地转换 char数组:float *f = reinterpret_cast<float*>(c);此转换可能具有未定义的行为,因为 float对齐要求可能比 char 更严格.

如果字节顺序不同,那么您首先遍历字节数组并对字节重新排序,如下所示:

// assuming sizeof(float) == sizeof(uint32_t)
for (int i; i<sizeof c; i+=sizeof(float)) {
uint32_t i;
std::memcpy(&i, c + i, sizeof(uint32_t));
ntoh(i); // swaps bytes from Network TO Host order.
std::memcpy(c + i, &i, sizeof(uint32_t));
}

关于c++ - 如何将 char 数组转换为 float 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187318/

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