进制转换,16进制与float互转

2023-05-16

#include <winsock.h>
#pragma comment(lib, "Ws2_32.lib")

//将一个8位数高低4位交换
static unsigned char bswap_8(unsigned char v)
{

    return ((v & 0xff) << 4) | (v >> 4); //将参数(v & 0xff) << 4 相当于放到高位, v >> 4 位相当于放在低位
}

//将一个16位数高低8位交换
static unsigned short bswap_16(unsigned short v)
{
    return ((v & 0xff) << 8) | (v >> 8);
}

//将一个32位数高低16位交换
static unsigned int bswap_32(unsigned int v)
{
    return ((v & 0xff) << 24) | ((v & 0xff00) << 8) |
           ((v & 0xff0000) >> 8) | (v >> 24);
}

enum DataByteOrder
{
    ABCD,
    DCBA,
    BADC,
    CDAB
};

float get_float_databyteorder(const uint16_t *src, DataByteOrder order)
{
    float f = 0;
    uint32_t i;
    switch (order)
    {
    case ABCD:
        i = ntohl(((uint32_t)src[0] << 16) + src[1]);
        memcpy(&f, &i, sizeof(float));
        break;

    case DCBA:
        i = ntohl(bswap_32((((uint32_t)src[0]) << 16) + src[1]));
        memcpy(&f, &i, sizeof(float));
        break;

    case BADC:
        i = ntohl((uint32_t)(bswap_16(src[0]) << 16) + bswap_16(src[1]));
        memcpy(&f, &i, sizeof(float));
        break;

    case CDAB:
        i = ntohl((((uint32_t)src[1]) << 16) + src[0]);
        memcpy(&f, &i, sizeof(float));
        break;

    default:
        break;
    }

    return f;
}

void set_float_databyteorder(float f, DataByteOrder order, uint16_t *dest)
{
    uint32_t i;
    switch (order)
    {
    case ABCD:
        memcpy(&i, &f, sizeof(uint32_t));
        i = htonl(i);
        dest[0] = (uint16_t)(i >> 16);
        dest[1] = (uint16_t)i;
        break;

    case DCBA:
        memcpy(&i, &f, sizeof(uint32_t));
        i = bswap_32(htonl(i));
        dest[0] = (uint16_t)(i >> 16);
        dest[1] = (uint16_t)i;
        break;

    case BADC:
        memcpy(&i, &f, sizeof(uint32_t));
        i = htonl(i);
        dest[0] = (uint16_t)bswap_16(i >> 16);
        dest[1] = (uint16_t)bswap_16(i & 0xFFFF);
        break;

    case CDAB:
        memcpy(&i, &f, sizeof(uint32_t));
        i = htonl(i);
        dest[0] = (uint16_t)i;
        dest[1] = (uint16_t)(i >> 16);
        break;

    default:
        break;
    }
}

int main(int argc, char *argv[])
{
    float f1 = 12.34;
    uint16_t dst[2];
    set_float_databyteorder(f1, ABCD, dst);
    float f2 = get_float_databyteorder(dst, ABCD);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进制转换,16进制与float互转 的相关文章

  • 自定义支持 float 的 range 函数

    python range 函数是步进函数 xff0c 可快速优雅地创建一个整数列表 xff0c 一般用在 for 循环中 但是 python 自带的 range 步进函数只支持整数类型 xff0c 不支持浮点数 那么 xff0c 为了支持浮
  • YOLO V5出现RuntimeError: result type Float can‘t be cast to the desired output type long int解决方法

    在使用YOLO框架训练自己的数据集时候 xff0c 开始跑train py xff0c 出现如下报错 xff1a RuntimeError result type Float can t be cast to the desired out
  • 4.2用Effect实现多纹理化效果

    4 2用Effect实现多纹理化效果 前面我们介绍了一个使用像素着色器实现的多纹理化 这里用Effect框架重新给于实现 读者可以比较两者之间的异同 体会Effect框架给我们带来了哪些方面的改善 4 2 1着色器 下面是着色器代码 该代码
  • 强大的PropertyGrid

    PropertyGrid 做工具一定要用这东西 把要编辑的对象看成类的话 所有要编辑的属性就是成员 嗯嗯 最近看了几眼Ogitor 它对于PropertyGrid的使用就很不错 所有要编辑的对象 灯光 模型 粒子等等 都有一个共同的基类 每
  • GLSL学习笔记

    From http apps hi baidu com share detail 19177385 GLSL语言内置的变量 包括内置的顶点属性 attribute 一致变量 uniform 易变变量 varying 以及常量 const 一
  • VC++ 教程

    基本概念 对象 面向对象编程2 定义实体后 可以不知道此实体的功能是怎样实现的 也能使用它们 核心概念 1 数据封装 将一个数据与这个数据有关的操作集合封装在一起 形成一个能动的实体 称为对象 2 继承 在面向对象语言中 类功能支持层次机制
  • JAVA关键字详解

    JAVA关键字详解 1 final数据 1 gt 对于基本类型前加以final修饰 表示被修饰的变量为常数 不可以修改 一个既是static有是final的字段表示只占据一段不能改变的存储空间 2 gt final用于对象应用时 final
  • float,double 的范围和有效数字怎么算出来的?

    首先说一下 范围是3 4E 38 3 4E 38 可提供7位有效数字 上述这两个量都是近似值 各个编译器不太一样的 下面我就将标准值是怎么定义的 和你说一下 这个比较复杂 建议你找一下IEEE754标准看一下 这个简单说一下吧 在IEEE7
  • 如何将字符串str转为float数组

    麻烦点个赞 今天在学习过程中遇到了将字符串转为数组的问题 以下是解决方案 如果数据格式正确 数据已经被放到数组里了 的话直接一行代码就能解决直接改变类型就可以 你的代数据如果直接长这个样子那就直接运行下面那一行代码 import numpy
  • 文字模糊效果(Opencv实现)

    效果图 实现过程 该方法以photoshop中的图层为基本思想 对文字的处理 实际上是将图片作为一幅图像来处理的 而背景是一幅图像 即另一个图层 1 读取文字图片 将图片进行高斯模糊 因高斯模糊是一个卷积的过程 所以可以设定卷积因子的大小
  • 光流法介绍

    光流场法的基本思想 在空间中 运动可以用运动场描述 而在一个图像平面上 物体的运动往往是通过图像序列中不同图像灰度分布的不同体现的 从而 空间中的运动场转移到图像上就表示为光流场 Optical Flow Field 光流场反映了图像上每一
  • C#根据经纬度计算两点距离(单位是千米)

    SQL CREATE function dbo fnGetDistance LatBegin REAL LngBegin REAL LatEnd REAL LngEnd REAL RETURNS FLOAT AS BEGIN DECLARE
  • 已知空间一点到另外两点直线的距离

    转自 http www cnblogs com clarkustb archive 2008 11 04 1326500 html 已知空间一点到另外两点直线的距离 设空间中的三点为M1 M2 M3 分别用矢量a b表示方向向量M1M2和M
  • javascript中的float运算精度

    有人问到一个js问题 var i 0 07 var r i 100 alert r 结果为什么是7 0000000000000001 查了下资料 其实我们知道JavsScript中 变量在存储时并不区分number和float类型 而是统一
  • ply文件格式详细说明

    典型的 PLY 文件结构 头部 顶点列表 面片列表 其他元素列表 头部是一系列以回车结尾的文本行 用来描述文件的剩余部分 头部包含一个对每个元素类型的描述 包括元素名 如 边 这个元素在工程里有多少 以及一 个与这个元素关联的不同属性的列表
  • c语言2进制转3进制

    保存答案的 要求二进制满足最多64位 网上的答案都不对 听同学讲用了 unsigned long long 和 运算左移 方法一 include
  • VC++实现视频压缩编码标准 MPEG-4

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 需要源码的请与我联系 参考书籍 lt
  • c 十进制数转十六进制

    有3种方式实现 其中两种是使用系统函数 另一种是直接自己编写 使用系统函数实现要加入 include
  • 任意进制之间的转换(C++实现)

    任意进制之间的转换 C 实现 题目描述 输入格式 第一行输入两个整数 n 和 m 2 lt n m lt 16 n 代表的是第二行输入的数的进制 m 代表的是输出的数字的进制 第二行输入一个x 如果有字母 输入大写字母 输出格式 输出一个
  • 在GPU上实现光线跟踪

    include cuda h include book h include cpu bitmap h define DIM 1024 生成图像的大小 DIM DIM define SPHERES 20 生成的图像中球体的个数 define

随机推荐