Python开发笔记之-浮点数传输
2024-08-31 10:16:37
操作系统 : 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)
最新文章
- Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
- SQL Server里的闩锁耦合(Latch Coupling)
- WAP端 经验记录1
- CSS 声明( Declarations )
- 导航栏视图设置 tabbleView 是设置总背景图
- 【BZOJ】【1045/1465】【HAOI2008】糖果传递
- 一款jQuery立体感动态下拉导航菜单特效
- c++面试常见160问
- Java继承与清理
- 数据结构:最小生成树--Prim算法
- 复制vmware虚拟机后,eth0无法显示问题
- winform制作小工具的技巧
- JDBC学习笔记(四)
- Windows 不能在本地计算机启动 OracleDBConsoleorcl的问题解决方法
- 关于PHP的 PHP-FPM进程CPU 100%的一些原因分析和解决方案
- delete 删除对象属性
- tomcat 启动报错org.hibernate.cfg.annotations.SimpleValueBinder.setType
- arcgis api for JavaScript _跨域请求
- Java简单的数据库连接
- python配置文件操作——configparser模块
热门文章
- java实现视频转码
- 今天七夕节,外面下着大雨,用Python的tkinter做一个下爱心雨的特效,发给妹子
- 将python工程部署到新服务器(对virtualenv工具进行环境迁移)
- 0-python变量及基本数据类型
- centos 6.5安装zabbix 4.4
- 警告:MySQL-server-5.6.26-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
- mysql存储过程简单例子
- 爬虫多次爬取时候cookie的存储用于登入
- dp的平行四边形优化
- aria2 ssl