十六进制转换成整型和浮点型

58 篇文章 2 订阅
43 篇文章 0 订阅

1、十六进制hex转换为整型

思路:这个比较简单,只需要进行移位即可,整型在计算机本质的存储是二进制

//int is 4 char,need the input is array with four hex; 
int char4_int(unsigned char* pData)
{
    int t = 0;
    for (int i = 0; i < 4; i++){
        t = t << 8 | pData[i];
    }
    return t;
}

//long int is 8 char,need the input is array with eight hex; 
long int char8_int(unsigned char* pData)
{
    long int t = 0;
    for (int i = 0; i < 8; i++){
        t = t << 8 | pData[i];
    }
    return t;
}

 

2、8个hex转换为一个double

思路:先转换为一个64长度数组,然后根据浮点转换算法进行转换。先计算出指数开始数,然后进行累加。或者将hex数组转换成一个64位的整型,然后再进行提取位浮点算法计算出浮点数值!

double char8_double(unsigned char* pData)
{
    char bin[64];
    for(int i = 0; i < 8; i++){
        unsigned char GetBit = 0x80;
        for (int j = 0; j < 8; j++){
            if (GetBit & pData[i]){
                bin[i * 8 + j] = 1;
            }
            else
                bin[i * 8 + j] = 0;
            GetBit = GetBit >> 1;
        }
    }
    return BinaryToDouble2(bin);
}
double BinaryToDouble2(char *bina){
    int i, j, expo = 0;
    double sum = 0, sum2 = 0;
    for (i = 11; i > 0; i--){
        expo += (bina[i] * power(2, 11 - i));
    }
    expo -= 1023;//指数=阶码减去1023!

    bina[11] = 1;
    j = expo + 1;//
    for (i = 11; i < 64; i++){
        sum2 += (bina[i] * power(2, --j));
    }
    /*
    for (i = 11 + expo; i < 64; i++){
        sum += bina[i] * (1.0 / power(2, i - 10 - expo));
    }*/

    if (bina[0] == 1){
        return (-(sum2 + sum + 0.0000001));
    }
    else{
        return (sum2 + sum + 0.0000001);
    }
}

//function: base^index
double power(int base, int index){
    double value = 1.0;
    int count;
    if (index == 0){
        value = 1; 
    }
    else if (index<0){
        index = -index;
        for (count = 1; count <= index; count++){
            value *= base;
        }
        value = 1.0 / value;
    }
    else if (index>0){
        for (count = 1; count <= index; count++){
            value *= base;
        }
    }
    return value;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值