IEEE754 浮点数和Hex转换

本文详细介绍了如何在Qt中实现字节与无符号整数、浮点数之间的转换,包括处理大端和小端字节序。通过具体的代码示例,展示了静态函数的使用,如将QByteArray转换为quint32或float类型,以及反向操作。此外,还提供了UI交互函数,用于实时更新十六进制编辑框与浮点数编辑框的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static quint32 toUint(const QByteArray &data, bool bigEndian)
{
	if (data.size() != 4)
		return 0;

	quint32 word = 0;

	if (bigEndian) {
		word = quint32((quint8(data.at(0)) << 24) |
					   (quint8(data.at(1)) << 16) |
					   (quint8(data.at(2)) <<  8) |
					   (quint8(data.at(3)) <<  0));
	} else {
		word = quint32((quint8(data.at(0)) <<  0) |
					   (quint8(data.at(1)) <<  8) |
					   (quint8(data.at(2)) << 16) |
					   (quint8(data.at(3)) << 24));

	}
	return word;
}

static float toFloat(const QString &data, bool bigEndian)
{
	const QByteArray ba = QByteArray::fromHex(data.toLatin1());
	quint32 word = toUint(ba, bigEndian);

	const float *f = reinterpret_cast<const float *>(&word);

	return *f;
}

static QString toHex(quint32 value, bool bigEndian)
{
	QByteArray ba;
	if (bigEndian) {
		ba.append(char(value >> 24));
		ba.append(char(value >> 16));
		ba.append(char(value >>  8));
		ba.append(char(value >>  0));
	} else {
		ba.append(char(value >>  0));
		ba.append(char(value >>  8));
		ba.append(char(value >> 16));
		ba.append(char(value >> 24));
	}
	return ba.toHex().toUpper();
}

static QString toHex(float value, bool bigEndian)
{
	const quint32 *i = reinterpret_cast<const quint32 *>(&value);

	return toHex(*i, bigEndian);
}

void on_hexEdited()
{
	const bool bigEndian = ui->bigEndian->isChecked();

	float f = toFloat(ui->hexLineEdit->text(), bigEndian);
	ui->floatLineEdit->setText(QString::number(double(f)));
}

void on_floatEdited()
{
	const bool bigEndian = ui->bigEndian->isChecked();
	const float f = ui->floatLineEdit->text().toFloat();

	ui->hexLineEdit->setText(toHex(f, bigEndian));
}

void on_bigEndiantoggled()
{
	on_floatLineEdit_textEdited();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值