我现在做的是java socket服务端,然后和c++那边通信,我不知道怎么接受c++发的数据,然后判断,经过判断再返回相应的数据,该怎么做?谢谢
1、big-endian与little-endian
Endian定义:在计算机系统体系结构中用来描述在多字节数中各个字节的存储顺序。
big-endian也称高位在前、大端在前。是计算机体系结构中一种描述多字节存储顺序的术语,在这种机制中最重要字节(MSB)存放在最低端的地址 上。采用这种机制的处理器有Mortolora PowerPC微处理器系列和绝大多数的 RISC处理器。
big-endian 最直观的字节序:
内存地址从左到右与值由低到高的顺序相对应。
little-endian也称低位在前、小端在前。计算机体系结构中一种描述多字节存储顺序的术语,在这种机 制中最不重要字节(LSB)存放在最低端的地 址上。采用这种机制的处理器有Intel x86系列微处理器和一些网络通信设备。该术语除了描述多字节存储顺序外还常常用来描述一个字节中各个比特的排放次序,这里仅讨论多字节存储循序。
little-endian是最符合人的思维的字节序,低与低,高与高一一对应:
地址低位存储值的低位
地址高位存储值的高位
下面举一个例子具体说明big-endian与little-endian:
int nValue = 0x01020304;
上面的整型nValue有4个字节,其中01为最高位的字节,04为最低位的字节。那么在内存(或文件)中,该值的存储循序为:
内存(或文件)地址:0x12000001 0x12000002 0x12000003 0x12000004
Big-endian : 01 02 03 04
Little-endian : 04 03 02 01
如果用一个byte数组来保存的话,也就是如下:
Big-endian模式下: byte byValue[] = {0x01, 0x02, 0x03, 0x04};
Little-endian模式下:byte byValue[] = {0x04, 0x03, 0x02, 0x01};
Big-endian或是little-endian的判断:
bool IsLittleEndian()
{
int i = 1;
char *p = (char*)&i;
if ( *p = 1 )
return true; // 小端
else
return false; // 大端