(该文章是在使用qt udp传输时接收情况)
1.整形(short为例)
short是2字节,1字节是8bit,
例如short a = 1;
a通过udp传输,通过网络助手接到的情况:01 00
因为时小端发送,所以低字节在低位,高字节在高位,所以读取时需要转换即为:00 01
因为是16进制,转换二进制:0000 0000 0000 0001.。
2.浮点型(与整形不同)(IEEE标准)
float
float是4字节
float b = 8;
b通过udp传输,通过网络助手接到的情况:00 00 00 41
因为是小端发送,所以低字节在低位,高字节在高位,
所以读取时需要转换即为:41 00 00 00
16进制转换二进制:0100 0001 0000 0000
第一个0是符号(0正,1负) 之后100 0001 0 是指数(8位),转换为10进制为128+2 = 130;
根据IEEE标准单精度浮点数偏差需要减去127 所以130-127 = 3;(指数)
之后的 000 0000 根据IEEE标准的形式是1.0000000,该数小数点向有移动“指数”的个数,
即1000.0000,所以1000的二进制转换为十进制是8,.0000这些是小数部分。
double
和float思路一样,不过是指数的位数不同
double是8字节
double c =7 ;
c通过udp传输,通过网络助手接到的情况:00 00 00 00 00 00 1C 40
因为是小端发送,所以低字节在低位,高字节在高位,
所以读取时需要转换即为:40 1C 00 00 00 00 00 00
16进制转换二进制:0100 0000 0001 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
第一个0是符号(0正,1负) 之后100 0000 0001 是指数(11位),转换为十进制1024+1=1025;
根据IEEE标准双精度浮点数偏差需要减去1023 所以1025-1023 = 2;(指数)
之后的 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000
根据IEEE标准的形式是1.1100 0000 0000 0000 0000 0000 0000 0000 0000 0000,该数小数点向有移动“指数”的个数,
即111.00 0000 0000 0000 0000 0000 0000 0000 0000 0000,所以111二进制转换为十进制位7,
.00 0000 0000 0000 0000 0000 0000 0000 0000 0000为小数部分。