将正浮点数组转换为无符号短数组,并按C++舍入
convert a positive float array to an unsigned short array with rounding in C++
>我有一个正浮点数组,想将此数组转换为带有舍入的无符号短数组。我怎样才能以有效的方式做到这一点?下面是一个示例:
float floatArr[] = {1.2, 1.8, 2.1, 2.5, 3.2};
unsigned short usArr[5];
// I could do this
std::copy(floatArr, 5, usArr);
但是,它只会进行转换,因为它基本上复制了前两个字节。所以结果是usArr[] = {1, 1, 2, 2, 3}
.我的问题是如何将这个带有舍入而不是强制转换的浮点数组转换为usArr[] = {1, 2, 2, 3, 3}
?谢谢你,我将不胜感激任何帮助!
似乎您想四舍五入到最接近而不是向下舍入std::round
这将有助于您。使用 std::transform
一步完成舍入和复制:
#include <algorithm>
#include <iostream>
#include <cmath>
int main()
{
float floatArr[] = {1.2, 1.8, 2.1, 2.5, 3.2};
unsigned short usArr[5];
// (1) Using a lambda to choose correct overload:
std::transform(floatArr, floatArr + 5, usArr, [](float f){ return std::round(f); });
// (2) Using static cast to enforce that specific overload is called:
std::transform(floatArr, floatArr + 5, usArr, static_cast<float(*)(float)>(std::round));
for(int i = 0; i < 5; ++i)
std::cout << usArr[i] << ' ';
}
相关文章:
- 指向 c++ 中的向量数组并将其发送到函数的指针
- 将浮点数转换为无符号字符数组并打印出来
- 将对象的字节复制到数组并再次复制回来是否安全
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 如何从文件中读取单词,将它们分配给数组并分析其内容?
- 拆分字符数组并存储为向量
- 在 Cython 中创建一个连续数组并将其传递给C++
- 将值更改为 c++ 的数组并保存文件
- 附加动态数组并在完成后将其大小加倍
- BitBlt转换为字节数组并从c ++解析为c#
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- C++ 如何从文本文件中扫描二维数组并对行求和?
- C++ 循环逐行写入文件还是添加到数组并在循环后写入文件?
- 如何初始化可以设置为默认数组并将输入/输出作为数组的类函数?
- 如何使用文件填充数组并将其与用户输入C 进行比较
- 如何在 VBA/Excel 中创建字符串数组并将其发送到C++ DLL,以便可以在 DLL 中循环访问它
- 初始化数组并出现堆栈溢出错误
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 编写一个递归功能,该功能采用数组并以相反顺序显示元素,而无需在末尾启动数组的索引
- 按引用传递数组并修改值C++