float/uint转16进制(大端模式)

文章介绍了如何在C++中进行16进制与float及uint之间的转换。通过共用体进行float到16进制的转换,使用大端或小端模式;uint转16进制则通过除法和模运算实现。在QT环境下,可以利用.toUInt方法将16进制转换为uint,然后再转换为float。
摘要由CSDN通过智能技术生成

记录一下有关16进制的类型转换(四字节),下次也许就不会这么头大了/(ㄒoㄒ)/~~,下面是各个转换的关键代码:

以下转换包含的头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

1、float➡16进制

//共用体
union HEX {
    float num;
    unsigned char hex_num[4];
};


//类型转换(float->16)
void conversion(float float_data, char *hex_p)
{
    union HEX float_num;
    float_num.num = float_data;

    memset(hex_p, '\0', sizeof(hex_p));
    char *ptr = hex_p;

    for(int i = 0; i < 4; i++)
    {
        //大端模式顺着来0-4,小端模式逆着来4-0
        snprintf(ptr, sizeof(char)*4, "%02X", float_num.hex_num[4-i-1]);
        ptr += 2;
    }
}


void Result()
{
    float data;                   //待转换的float数
    char result_buf[32] = {0};    //存储16进制数

    //float类型转换为十六进制数
    conversion(data, result_buf);
}

例如:

float data = 250.5;

char result_buf[32] = {4,3,7,A,8,0,0,0} ;

然后可以通过字符串拼接得到一个十六进制数,以下同理。

验证网址:https://www.asciim.cn/hex/float.html 

2、uint➡16进制

//类型转换(uint->16)
void conversion(uint uint_data, char *hex_p)
{
    //大端模式
    hex_p += 7;
    for(int i = 7; i >= 0; i--)
    {
        int mod = uint_data % 16;
        if (mod < 10)
        {
            *hex_p = mod  + '0';
        }
        else
        {
            *hex_p = mod - 10 + 'A';
        }
        uint_data = uint_data / 16;
        if(i > 0)
        {
            hex_p--;
        }
    }
}


void Result()
{
    uint data;                    //待转换的uint数
    char result_buf[32] = {0};    //存储16进制数

    //uint类型转换为十六进制数
    conversion(data, result_buf);
}

3、16进制➡float/uint

由于我是在qt实现的,它有专门的.toUInt类型转换,其他的还没有尝试过,这里思路是先转uint,再转float。

//类型转换(16->float)
float reconversion(QString hex_data)
{
    uint hex_uint = hex_data.toUInt(nullptr, 16);
    float hex_float = *(float*)&hex_uint;

    return hex_float;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值