【发布时间】:2012-09-26 15:24:46
【问题描述】:
我正在读取(以二进制格式)一个无符号 8 位整数文件,然后我需要将其转换为浮点数组。通常我会做如下的事情:
uint8_t *s1_tmp = (uint8_t *)malloc(sizeof(uint8_t)*num_elements);
float *s1 = (float *)malloc(sizeof(float)*num_elements);
fread(s1_tmp, sizeof(uint8_t), num_elements, file_id);
for(int i = 0; i < num_elements; i++){
s1[i] = s1_tmp[i];
}
free(s1_tmp)
可以肯定的是,没有灵感,但它确实有效。然而,目前num_elements 大约是 270 万,所以这个过程超级慢而且 IMO 浪费。
有没有更好的方法将 8 位整数读入浮点数或将 uint8_t 数组转换为浮点数数组?
【问题讨论】:
-
您是否考虑过使用 SIMD 来做这件事?
-
我假设您正试图通过存储
uint8_t而不是float来节省一些空间。逐一转换是最好的。 -
不要转换
malloc的返回值,如果可能的话最好完全避免转换。 stackoverflow.com/questions/605845/… -
我正在运行 Visual C++,所以强制转换是必要的。
标签: c arrays file-io type-conversion