bool IsLittle()//判断主机序是否为小端
{
short a = 0x0001;//小数据为0x01,高数据为0x00
return *(char *)&a == 0x01; //低地址放小数据
}
long Htonl(long a)
{
long b = 0;
if (!IsLittle())//大端
{
return a;
}
for (int i = 0; i<sizeof(a); i++)//小端:0x12345678->0x78563412
{
b = (b << 8) | (a & 0xff);
a >>= 8;
}
return b;
}
int main()
{
printf("%x\n", Htonl(0x12345678));
return 0;
}
我竟然如此沙雕的卡在了位运算上。。
0000 0000 0000 0000 0000 0000 1111 1111 0xff
0001 0010 0011 0100 0101 0110 0111 1000 a 0x12345678
0000 0000 0000 0000 0000 0000 0111 1000 & 0x00000078
0000 0000 0000 0000 0000 0000 0111 1000 b 0x00000078
0000 0000 0001 0010 0011 0100 0101 0110 a 0x00123456
0000 0000 0000 0000 0000 0000 0101 0110 & 0x00000056