二进制/十六进制转浮点数的编程(互转类似)

转换的程序:

// 输入十进制整数,输出同样内存排布的float表示
inline float i2f(int i)
{
    float f = 0;
    assert(sizeof(int) == sizeof(float));
    memcpy(&f, &i, 4);
    return f;
}   

inline double ll2d(long long ll)
{
    double d = 0;
    assert(sizeof(double) == sizeof(long long));
    memcpy(&d, &ll, 8);
    return d;
}   /* 何问起 hovertree.com */

应用:

int i = -1052770304;    // 反汇编看到的值是这样,实际是个float型,=-12.0
float f = i2f(i);
printf("f=%f\n", f);   

long long ll = 0x4004000000000000L;     // 内存里显示成这样。 实际是double型2.5
double d = ll2d(ll);
printf("d=%f\n", d);  /* 何问起 hovertree.com */

原理就是复制内存数据再以不同的数据类型来解释。

推荐:http://www.cnblogs.com/roucheng/p/cpp11.html

时间: 2024-08-01 10:53:58

二进制/十六进制转浮点数的编程(互转类似)的相关文章

Golang十六进制字符串和byte数组互转

Golang十六进制字符串和byte数组互转 需求 Golang十六进制字符串和byte数组互相转换,使用"encoding/hex"包 实现Demo package main import ( "encoding/hex" "fmt" ) func main() { str := "ff68b4ff" b, _ := hex.DecodeString(str) encodedStr := hex.EncodeToString

【JavaScript】js实现十六进制与浮点数的转换

来自ampedZ的博客园,原文地址:http://www.cnblogs.com/ampedZ/p/HexToSingle.html 基于IEEE 745标准的Hex与Single的转换,并加入了一定的防错处理. <!DOCTYPE html> <html><head><style type="text/css"> div#divBase{text-align:center;width:283px;} div#divTitle{clear

C语言定义 二进制 十六进制 普通字符串 转换函数

直接上干货,没啥好说的: 代码1:十六进制转字符串函数 1 #include<stdio.h> 2 #include<string.h> 3 #include<ctype.h> 4 void Hex2Byte(const char* source, unsigned char* dest, int sourceLen) 5 { 6 short i; 7 unsigned char highByte, lowByte; 8 for (i = 0; i < sourc

二进制十六进制转换 (C++版)

#include <iostream> #include <string> #include <stdint.h> using namespace std; string BinToHex(const string &strBin, bool bIsUpper = false) { string strHex; strHex.resize(strBin.size() * 2); for (size_t i = 0; i < strBin.size(); i

关于编程思想的类似

当我去搞hbase的时候发现hbase和Hibernate两段相似的代码,在 spring整合包中 HibernateTemplate类源码有这样一段写法 /** * Create a new HibernateTemplate instance. * @param sessionFactory the SessionFactory to create Sessions with */ public HibernateTemplate(SessionFactory sessionFactory)

浮点数的二进制表示

基础知识: 十进制转十六进制: 十六进制转二进制: IEEE制定的浮点数表示规则: 了解: 目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算.这种结构是一种科学计数法,用符号.指数和尾数来表示,底数定为2--即把一个浮点数表示为尾数乘以2的指数次方再添上符号.下面是具体的规格: 符号位     阶码      尾数     长度 float           1          8        23      32 double         

进制(二进制、十进制、八进制、十六进制)

对于整数,有四种表示方式: 二进制:0,1 ,满2进1.以0b或0B开头. 十进制:0-9 ,满10进1. 八进制:0-7 ,满8进1. 以数字0开头表示. 十六进制:0-9及A-F,满16进1. 以0x或0X开头表示.此处的A-F不区分大小写. 如:0x21AF +1= 0X21B0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 A B C D E F 1.原码.反码.补码   所有数字在计算机底层都以二进制形式存在.  计

IEEE二进制浮点数算术标准学习

看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解. IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种. 用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来: 三部分为:符号位(si

Python 二进制,十进制,十六进制转换

十六进制 到 十进制 使用 int() 函数 ,第一个参数是字符串 '0Xff' ,第二个参数是说明,这个字符串是几进制的数.  转化的结果是一个十进制数. >>> int('0xf',16) 15 二进制 到 十进制 >>> int('10100111110',2) 1342 八进制 到 十进制 >>> int('17',8) 15 其实可以看到,不管 几进制数 转换成 十进制数 ,都是用 int()  函数 .之后后面的 第二个参数 写清楚 前面字