浮點數網路傳輸,浮點數傳輸
作業系統 : CentOS7.3.1611_x64
gcc版本 :4.8.5
Python 版本 : 2.7.5
思路如下 :
1、將浮點數a通過記憶體拷貝,賦值給相同位元組的整型資料b;
2、將b轉換為網路位元組序變數c並發送到服務端;
3、服務端接收c並將c轉換為主機位元組序變數d;
4、將整型資料d通過記憶體拷貝,賦值給相同位元組的浮點數據e;
至此,浮點數網路傳輸完成。
C範例程式碼:
#define htonl64 htobe64#define ntohl64 be64tohuint64_t htonf64(double dvalue){ uint64_t ulltmp = 0; memcpy(&ulltmp,&dvalue,8); ulltmp = htonl64(ulltmp); return ulltmp;}double ntohf64(uint64_t ulvalue){ uint64_t ulltmp = 0; double ret = 0.0; ulltmp = ntohl64(ulvalue); memcpy(&ret,&ulltmp,8); return ret;}
完整範例程式碼如下:
https://github.com/mike-zhang/cppExamples/blob/master/socketOpt/byteOrder/double_test1.c
python範例程式碼 :
def htonfl(f): s = struct.pack('d',f) return struct.unpack('!Q',s)[0]def fltonl(v): s = struct.pack('!Q',v) return struct.unpack('d',s)[0]
完整範例程式碼如下:
https://github.com/mike-zhang/pyExamples/blob/master/socketRelate/byteOrder_double1.py
好,就這些了,希望對你有協助。
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180320_浮點數網路傳輸.rst
歡迎補充