首先我们回顾一下Unity中有哪些数据类型
char -- C++中是1bit, 在C#Java中是2bit
zbool --1Bit
整形
byte -- 1byte 8bit
short-- 2byte 16bit
int--4byte 32bit
long
Long类型比较特殊,在32位的机器上时占 4byte 64位机器上站8byte。很多通信用的都是long整形,那如何才能在网络通讯的时候,所有的机器,不管是32位还是64位的机器上网络通讯的字节都是一样的呢。
解决:将long转为浮点数,先转成小数以浮点数传播再乘以比例,比如 0.0001*10000
浮点型
float--4byte
double--8byte
C++服务器与Java服务器的区别?
在C++服务器和Java服务器进行对接的时候, 数据会发生很大的变化,主要原因是C++的数据存储顺序是小端排序,C#/Java的是大端排序
1:Char 的表示范围不一样,C++中是1bit, 在C#Java中是2bit
2:Byte的表示方式不同, 以Short为例子
在C++中是以小端排序Little Endian的
0000 0000 0000 0001
在Java和C#中是以大端排序Big Endian的
0000 0001 0000 0000
如何对应这种问题——移位
public static void ReverseBytes(byte[] bytes)
{
byte temp;
int length = bytes.Length;
for (int i = 0; i < length / 2; i++ )
{
temp= bytes[length - 1 - i];
bytes[length - 1 - i] = bytes[i];
bytes[i] = tmp;
}
}
//规定转换起始位置和长度
public static void ReverseBytes(byte[] bytes, int start, int len)
{
int end = start + length - 1;
byte temp;
int i = 0;
for (int index = start; index < start + length/2; index++,i++)
{
temp= bytes[end - i];
bytes[end - i] = bytes[index];
bytes[index] = temp;
}
}