浮點數網絡傳輸


操作系統 : 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

歡迎補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM