关于数据大小端的部分问题

写程序的时候碰到了数据写入数据库时需要对数据的大小端的处理,所以记录一下这个问题。

一般我们使用数据或者数据传输过程中,数据都是以大端模式存在,如:

00 01 00 02 00 03 00 04(高位在前低位在后的一个逻辑)

但是某些特殊情况下,会碰到数据存储或者传输过程需要转换成小端模式的情况:

04 00 03 00 02 00 01 00(低位在前,高位在后)

对于寄存器来说,小端模式符合存储的逻辑

存入单个寄存器,直接将数据逆序就行了,对于多寄存器方式的存入或传输,在逆序后还需要将单个字节进行交换,所以需要加入一个交换的函数。

具体怎么实现,我就不多说了,原理很简单。

附上我通用的转换代码

整体逆序:

void RevBuf(BYTE* pbBuf, WORD wLen)
{
	BYTE* pbEnd = pbBuf + wLen - 1;
	wLen /= 2;

	BYTE b;
	for (WORD i=0; i<wLen; i++,pbBuf++,pbEnd--)
	{
		b = *pbBuf;
		*pbBuf = *pbEnd;
		*pbEnd = b;	
	}
}

字节交换

void SwapBufBytes(BYTE* pbBuf, WORD wLen)
{
	for (WORD i = 0; i < wLen - 1; i += 2) 
	{
		std::swap(pbBuf[i], pbBuf[i + 1]);
	}
}

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值