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

  

Python开发笔记之-浮点数传输的更多相关文章

  1. python开发笔记-通过xml快捷获取数据

    今天在做下python开发笔记之如何通过xml快捷获取数据,下面以调取nltk语料库为例: import nltk nltk.download() showing info https://raw.g ...

  2. python开发笔记-python调用webservice接口

    环境描述: 操作系统版本: root@9deba54adab7:/# uname -a Linux 9deba54adab7 --generic #-Ubuntu SMP Thu Dec :: UTC ...

  3. python开发笔记-Python3.7+Django2.2 Docker镜像搭建

    目标镜像环境介绍: 操作系统:ubuntu16.04 python版本:python 3.7.4 django版本:2.2 操作步骤: 1.  本地安装docker环境(略)2. 拉取ubunut指定 ...

  4. python开发笔记之zip()函数用法详解

    今天分享一篇关于python下的zip()函数用法. zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素按顺序组合成一个tuple,每个tuple中包含的是原 ...

  5. Python开发笔记之正则表达式的使用

    查找正则表达式 import re re_txt = re.compile(r'(\d)*.txt') m = re_txt.search(src) if not m == None: m.group ...

  6. python开发笔记-类

    类的基本概念: 问题空间:问题空间是问题解决者对一个问题所达到的全部认识状态,它是由问题解决者利用问题所包含的信息和已贮存的信息主动的地构成的. 初始状态:一开始时的不完全的信息或令人不满意的状况: ...

  7. Python开发笔记:网络数据抓取

    网络数据获取(爬取)分为两部分: 1.抓取(抓取网页) · urlib内建模块,特别是urlib.request · Requests第三方库(中小型网络爬虫的开发) · Scrapy框架(大型网络爬 ...

  8. python开发笔记-ndarray方法属性详解

    Python中的数组ndarray是什么? 1.NumPy中基本的数据结构 2.所有元素是同一种类型 3.别名是array 4.利于节省内存和提高CPU计算时间 5.有丰富的函数 ndarray的创建 ...

  9. python开发笔记-python-numpy

    一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能:  除了为Python提供快速的数组处理能力,Numpy在数据分析方面还有另外 ...

随机推荐

  1. Hadoop window win10 基础环境搭建(2.8.1)(转)

    下面运行步骤除了配置文件有部分改动,其他都是参照hadoop下载解压的share/doc/index.html. hadoop下载:http://apache.opencas.org/hadoop/c ...

  2. PS,大鹏视频,UI美工设计, 精品课程视频(500G)

    PS,大鹏视频,UI美工设计, 精品课程视频(500G 左右) ,需要的可以加我QQ 358918610 //--------------------------------------------- ...

  3. Anaconda3配置多版本python环境开发

    关注公众号:TJHIT

  4. 20.Python略有小成(面向对象Ⅱ)

    Python(面向对象Ⅱ) 一.类的空间问题 何处可以添加对象属性 class A: def __init__(self,name): self.name = name def func(self,s ...

  5. Python之路【第十八篇】:前端HTML

    一.前端概述 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind( ...

  6. AVR单片机教程——旋转编码器

    好久没写这个系列了.今天讲讲旋转编码器. 旋转编码器好像不是单片机玩家很常用的器件,但是我们的开发板上有,原因如下: 旋转编码器挺好用的.电位器能旋转的角度有限,旋转编码器可以无限圈旋转:旋转时不连续 ...

  7. javascript document.createElement() document.createTextNode() appendChild()

    //--------------document.createElement("div") var div = document.createElement("div&q ...

  8. MacBook Pro配置汇编开发环境

    配置开发环境 方法一: 打开命令行,输入指令which nasm查看nasm的安装路径,Mac系统默认安装了nasm.一般默认返回的路径是/usr/bin/nasm 接着输入指令alias nasm= ...

  9. Eclipse创建ssm项目

    1.创建Maven项目 2.勾选上面的 3.打成war包的形式 4.配置webapp.xml  Project Facets——Dynamic Wed Module 2.5 ——然后点击下面的提示 5 ...

  10. win10 bcdedit testsigning

    win10 bcdedit testsigning # 禁用系统完整性检查和禁用驱动签名以及进入测试签名驱动模式> bcdedit.exe /set nointegritychecks on & ...