/* @函数名称 : addDataValue
* @函数描述 : 将数值按照指定缩放比例转换成整数,写入QByteArray,
* 支持 1、2、4 字节写入(大端序,高字节在前)
* @参数说明 :
* data (QByteArray&) - 目标字节数组,写入数据
* value (T) - 传入的数值,支持整数和浮点数类型
* scale (double) - 缩放比例,例如scale=100表示放大100倍
* byteCount (int) - 写入字节数,支持 1、2、4,默认 2 字节
* @调用示例 :
* QByteArray data;
* double val = 12.34;
* addDataValue(data, val, 100.0); // 写2字节分辨率0.01
* addDataValue(data, val, 10.0, 1); // 写1字节分辨率0.1
* addDataValue(data, val, 1000.0, 4); // 写4字节分辨率0.001
*/
template<typename T> void addDataValue(QByteArray &data, T value, double scale, int byteCount = 2)
{
static_assert(std::is_arithmetic<T>::value, "仅支持数值类型");
// 缩放后转换为无符号整数
uint64_t scaledValue = static_cast<uint64_t>(value * scale);
if (byteCount == 1)
{
data.append(static_cast<char>(scaledValue & 0xFF));
}
else if (byteCount == 2)
{
data.append(static_cast<char>((scaledValue >> 8) & 0xFF));
data.append(static_cast<char>(scaledValue & 0xFF));
}
else if (byteCount == 4)
{
data.append(static_cast<char>((scaledValue >> 24) & 0xFF));
data.append(static_cast<char>((scaledValue >> 16) & 0xFF));
data.append(static_cast<char>((scaledValue >> 8) & 0xFF));
data.append(static_cast<char>(scaledValue & 0xFF));
}
else
{
qWarning() << "addDataValue不支持" << byteCount << "字节写入";
}
}
将数值按照指定缩放比例转换成整数,写入QByteArray
最新推荐文章于 2026-06-22 22:46:40 发布

3万+

被折叠的 条评论
为什么被折叠?



