Qt、C++中,大小端变量类型转换

5 篇文章 0 订阅

#define isEndianTyped true //ture为大端;false为小端

1、quint32转QbyteArray

QByteArray byteToBytes::quint32ToQByteArray(quint32 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
		output[1] = (uchar)((0x00ff0000 & input) >> 16);
		output[0] = (uchar)((0xff000000 & input) >> 24);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
		output[2] = (uchar)((0x00ff0000 & input) >> 16);
		output[3] = (uchar)((0xff000000 & input) >> 24);
	}
	return output;
}

2、QbyteArray 转quint32

quint32 byteToBytes::QByteArrayToquint32(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
		output |= (input[1] << 16) & 0x00FF0000;
		output |= (input[0] << 24) & 0xFF000000;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
		output |= (input[2] << 16) & 0x00FF0000;
		output |= (input[3] << 24) & 0xFF000000;
	}
	return output;
}

3、qint32转QbyteArray

QByteArray byteToBytes::qint32ToQByteArray(qint32 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
		output[1] = (uchar)((0x00ff0000 & input) >> 16);
		output[0] = (uchar)((0xff000000 & input) >> 24);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
		output[2] = (uchar)((0x00ff0000 & input) >> 16);
		output[3] = (uchar)((0xff000000 & input) >> 24);
	}
	return output;
}

4、QbyteArray转qint32

qint32 byteToBytes::QByteArrayToqint32(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
		output |= (input[1] << 16) & 0x00FF0000;
		output |= (input[0] << 24) & 0xFF000000;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
		output |= (input[2] << 16) & 0x00FF0000;
		output |= (input[3] << 24) & 0xFF000000;
	}
	return output;
}

5、quint16转QbyteArray

QByteArray byteToBytes::quint16ToQByteArray(quint16 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
	}
	return output;
}

6、QbyteArray转quint16

quint16 byteToBytes::QByteArrayToquint16(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
	}
	return output;
}

7、qint16转QbyteArray

QByteArray byteToBytes::qint16ToQByteArray(qint16 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
	}
	return output;
}

8、QbyteArray转qint16

qint16 byteToBytes::QByteArrayToqint16(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
	}
	return output;
}

9、QbyteArray转quint64

QByteArray byteToBytes::quint64ToQByteArray(quint64 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		QByteArray _output;
		_output.resize(sizeof(input));
		memcpy(_output.data(), &input, sizeof(input));
		for (int i = 0; i < _output.size(); i++)
		{
			output[i] = _output[_output.size() - i - 1];
		}
	}
	else
	{
		output.resize(sizeof(input));
		memcpy(output.data(), &input, sizeof(input));
	}
	return output;
}

10、quint64转QbyteArray

quint64 byteToBytes::QByteArrayToquint64(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		QByteArray _input;
		for (int i = 0; i < input.size(); i++)
		{
			_input[i] = input[input.size() - i - 1];
		}
		memcpy(&output, _input, sizeof(output));
	}
	else
	{
		memcpy(&output, input, sizeof(output));
	}
	return output;
}

11、QbyteArray转qint64

QByteArray byteToBytes::qint64ToQByteArray(qint64 input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		QByteArray _output;
		_output.resize(sizeof(input));
		memcpy(_output.data(), &input, sizeof(input));
		for (int i = 0; i < _output.size(); i++)
		{
			output[i] = _output[_output.size() - i - 1];
		}
	}
	else
	{
		output.resize(sizeof(input));
		memcpy(output.data(), &input, sizeof(input));
	}
	return output;
}

12、qint64转QbyteArray

qint64 byteToBytes::QByteArrayToqint64(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		QByteArray _input;
		for (int i = 0; i < input.size(); i++)
		{
			_input[i] = input[input.size() - i - 1];
		}
		memcpy(&output, _input, sizeof(output));
	}
	else
	{
		memcpy(&output, input, sizeof(output));
	}
	return output;
}

13、QbyteArray转int

int byteToBytes::QByteArrayToint(QByteArray input)
{
	int output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
		output |= (input[1] << 16) & 0x00FF0000;
		output |= (input[0] << 24) & 0xFF000000;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
		output |= (input[2] << 16) & 0x00FF0000;
		output |= (input[3] << 24) & 0xFF000000;
	}
	return output;
}

14、int转QbyteArray

QByteArray byteToBytes::intToQByteArray(int input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
		output[1] = (uchar)((0x00ff0000 & input) >> 16);
		output[0] = (uchar)((0xff000000 & input) >> 24);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
		output[2] = (uchar)((0x00ff0000 & input) >> 16);
		output[3] = (uchar)((0xff000000 & input) >> 24);
	}
	return output;
}

15、QbyteArray转uint

uint byteToBytes::QByteArrayTouint(QByteArray input)
{
	uint output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
		output |= (input[1] << 16) & 0x00FF0000;
		output |= (input[0] << 24) & 0xFF000000;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
		output |= (input[2] << 16) & 0x00FF0000;
		output |= (input[3] << 24) & 0xFF000000;
	}
	return output;
}

16、uint转QbyteArray

QByteArray byteToBytes::uintToQByteArray(uint input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
		output[1] = (uchar)((0x00ff0000 & input) >> 16);
		output[0] = (uchar)((0xff000000 & input) >> 24);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
		output[2] = (uchar)((0x00ff0000 & input) >> 16);
		output[3] = (uchar)((0xff000000 & input) >> 24);
	}
	return output;
}

17、QbyteArray转short

short byteToBytes::QByteArrayToshort(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
	}
	return output;
}

18、short转QbyteArray

QByteArray byteToBytes::shortToQByteArray(short input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
	}
	return output;
}

19、QbyteArray转ushort

ushort byteToBytes::QByteArrayToushort(QByteArray input)
{
	qint64 output;
	if (isEndianTyped)
	{
		output = input[3] & 0x000000FF;
		output |= (input[2] << 8) & 0x0000FF00;
	}
	else
	{
		output = input[0] & 0x000000FF;
		output |= (input[1] << 8) & 0x0000FF00;
	}
	return output;
}

20、ushort转QbyteArray

QByteArray byteToBytes::ushortToQByteArray(ushort input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		output[3] = (uchar)(0x000000ff & input);
		output[2] = (uchar)((0x0000ff00 & input) >> 8);
	}
	else
	{
		output[0] = (uchar)(0x000000ff & input);
		output[1] = (uchar)((0x0000ff00 & input) >> 8);
	}
	return output;
}

21、QbyteArray转float

float byteToBytes::QByteArrayTofloat(QByteArray input)
{
	float output;
	if (isEndianTyped)
	{
		QByteArray _input;
		for (int i = 0; i < input.size(); i++)
		{
			_input[i] = input[input.size() - i - 1];
		}
		memcpy(&output, _input, sizeof(output));
	}
	else
	{
		memcpy(&output, input, sizeof(output));
	}
	return output;
}

22、float转QbyteArray

QByteArray byteToBytes::floatToQByteArray(float input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		QByteArray _output;
		_output.resize(sizeof(input));
		memcpy(_output.data(), &input, sizeof(input));
		for (int i = 0; i < _output.size(); i++)
		{
			output[i] = _output[_output.size() - i - 1];
		}
	}
	else
	{
		output.resize(sizeof(input));
		memcpy(output.data(), &input, sizeof(input));
	}
	return output;
}

23、QbyteArray转double

double byteToBytes::QByteArrayTodouble(QByteArray input)
{
	double output;
	if (isEndianTyped)
	{
		QByteArray _input;
		for (int i = 0; i < input.size(); i++)
		{
			_input[i] = input[input.size() - i - 1];
		}
		memcpy(&output, _input, sizeof(output));
	}
	else
	{
		memcpy(&output, input, sizeof(output));
	}
	return output;
}

24、double转QbyteArray

QByteArray byteToBytes::doubleToQByteArray(double input)
{
	QByteArray output;
	if (isEndianTyped)
	{
		QByteArray _output;
		_output.resize(sizeof(input));
		memcpy(_output.data(), &input, sizeof(input));
		for (int i = 0; i < _output.size(); i++)
		{
			output[i] = _output[_output.size() - i - 1];
		}
	}
	else
	{
		output.resize(sizeof(input));
		memcpy(output.data(), &input, sizeof(input));
	}
	return output;
}

版权声明:本文为博主原创文章,转载请附上博文链接!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值