Python开发笔记之-浮点数传输

    操作系统 : 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;
}

  完整示例代码如下:

      

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <endian.h>

/*
double类型数据网络字节序与主机字节序之间的转换
*/

#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;    
}

int main()
{
    double a = 123.456;
    uint64_t b = 0;
    double c = 0.0;
    printf("a = %lf\n",a);
    b = htonf64(a);
    printf("b = %ld\n",b);
    c = ntohf64(b);
    printf("c = %lf\n",c);
    return 0;
}

  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]

  完整代码:

 

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import struct

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]

a = 123.456
print a
b = htonfl(a)
print b , hex(b)
print fltonl(b)

  

     

转载于:https://www.cnblogs.com/68xi/p/8616394.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值