在计算机中,我们将数据分割成了一个一个的字节(byte),而每个字节又有8位(bit)。一个字节,可以声明为unsigned char型数据,但是有时候不够用,毕竟一个UCHAR也就能表示0-255的数据。所以还会有short型(2字节),int型(4字节),浮点型float(4字节),double型(8字节)等等。
数据都是那些数据,但是有些计算机把值的低位存在低地址。有些计算机把值的高位存在低地址。不同CPU厂商大小端又不统一,例如,Motorala6800, PowerPC970等是大端,x86,VAX等是小端。这就要求不同计算机在交互的过程中可能需要进行大小端转换。
一、位移操作
二、蝶式交换法。这里我们用16位进行转换
蝶式法交换进行推演过程:
更抽象的来说原始位为 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
data = (data << 8) | (data >> 8);
这里之后序为 7 6 5 4 3 2 1 0 15 14 13 12 11 10 9 8
data = ((data << 4)&0xf0f0)|((data>>4)&0x0f0f);
之后序为3 2 1 0 7 6 5 4 11 10 9 8 15 14 13 12
data = ((data << 2)&0xcccc)|((data>>2)&0x3333);
之后序为1 0 3 2 5 4 7 6 9 8 11 10 13 12 15 14
data = ((data << 1)&0xaaaa)|((data>>1)&0x5555);
之后序为0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
三、查表法
查表法即就是将一些值存在内存中,在需要的时候查表即可,但是也会占用额外的存储空间。查表法主要是为了节省代码的执行时序,增加执行效率。