写程序的时候碰到了数据写入数据库时需要对数据的大小端的处理,所以记录一下这个问题。
一般我们使用数据或者数据传输过程中,数据都是以大端模式存在,如:
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]);
}
}