操作系統 : CentOS7.3.1611_x64 gcc版本 :4.8.5 Python 版本 : 2.7.5 思路如下 : 1、將浮點數a通過記憶體拷貝,賦值給相同位元組的整型數據b; 2、將b轉換為網路位元組序變數c併發送到服務端; 3、服務端接收c並將c轉換為主機位元組序變數d; 4、將整型數據d通 ...
操作系統 : 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 be64toh uint64_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
歡迎補充