各种数据类型转换为二进制字符串的类

   

写了一个将各种数据类型char/short/int/long/float/double,转换为二进制字符串输出的类,其中浮点数的机器内部表示颇有意味!

其中reinterpret_cast类型转换用法尤为重要,它根据二进制模型进行转换,但强调利用指针间的转换。

代码在Code::Blocks上编译通过。

如下

#include <string>
#include <iostream>
using namespace std;

namespace myLib
{
    struct int_double
    {
        int high;
        int low;
    };
    class convert
    {
    public:
        string ToBinString(char charValue);
        string ToBinString(short shortValue);
        string ToBinString(long longValue);
        string ToBinString(int intValue);
        string ToBinString(float floatValue);
        string ToBinString(double doubleValue);
    };

    string convert::ToBinString(char charValue)
    {
        string binStr;

        for(int i=sizeof(charValue)*8-1;i>=0;i--)
        {
            if((charValue>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }
        return binStr;
    }

    string convert::ToBinString(short shortValue)
    {
        string binStr;

        for(int i=sizeof(shortValue)*8-1;i>=0;i--)
        {
            if((shortValue>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }
        return binStr;
    }


    string convert::ToBinString(int intValue)
    {
        string binStr;

        for(int i=sizeof(intValue)*8-1;i>=0;i--)
        {
            if((intValue>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }

        return binStr;
    }

    string convert::ToBinString(long longValue)
    {
        string binStr;

        for(int i=sizeof(longValue)*8-1;i>=0;i--)
        {
            if((longValue>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }
        return binStr;
    }

    string convert::ToBinString(float floatValue)
    {
        string binStr;
        float* fpoint=&floatValue;

        int* bin_pointer=reinterpret_cast<int *>(fpoint);

        for(int i=sizeof(floatValue)*8-1;i>-1;i--)
        {
            if((*bin_pointer)>>i & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }

        return binStr;
    }

    string convert::ToBinString(double doubleValue)
    {
        string binStr;
        double* dpoint=&doubleValue;

        int_double* bin_pointer=reinterpret_cast<int_double *>(dpoint);

        for(int i=sizeof(doubleValue)*4-1;i>-1;i--)
        {
            if((bin_pointer->high>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }

        for(int i=sizeof(doubleValue)*4-1;i>-1;i--)
        {
            if((bin_pointer->low>>i) & 1)
                binStr.push_back('1');
            else
                binStr.push_back('0');
        }

        return binStr;
    }
}

int main()
{
 char chValue=46;
 short shValue=258;
 int iValue=100;
 long lValue=1224;
 float fValue=35.6F;
 double dValue=35.6;

 myLib::convert obj;

 cout<<obj.ToBinString(chValue)<<endl;
 cout<<obj.ToBinString(shValue)<<endl;
 cout<<obj.ToBinString(iValue)<<endl;
 cout<<obj.ToBinString(lValue)<<endl;
 cout<<obj.ToBinString(fValue)<<endl;
 cout<<obj.ToBinString(dValue)<<endl;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值