整型转换为32位二进制字符串

这篇博客介绍了将整型数值转换为32位二进制字符串的两种实现方式。第一种方法返回的是`std::string`类型,通过与运算和右移操作完成转换,并填充前导零。第二种方法返回`char*`类型,同样使用与运算和右移,但需要在堆上分配空间以保证字符串的持久化。两种方法都涉及到二进制表示的位操作和字符串处理。
摘要由CSDN通过智能技术生成

记录下整型转换为32位二进制字符串的两种方式。
一、返回string 类型

char digits[] =
{
    '0','1','2','3','4','5',
    '6','7','8','9','a','b',
    'c','d','e','f','g','h',
    'i','j','k','l','m','n',
    'o','p','q','r','s','t',
    'u','v','w','x','y','z'
};

std::string ToBinaryString(int i)
{
    char buf[32] = { 0 };
    //char buf[8] = { 0 };
    char* pBuf = buf;

    int charPos = 32;
    int radix = 1 << 1;
    int mask = radix - 1;
    do
    {
        pBuf[--charPos] = digits[i & mask]; // 与运算获取每次提取的数据
        i = i >> 1;
    } while (i != 0);

    std::string str;
    int strLen = 32 - charPos;
    int zeroLen = 0;

    while (zeroLen < charPos)
    {
        str.push_back(48);
        zeroLen++;
    }

    pBuf = pBuf + charPos;
    while (strLen)
    {
        str.push_back(*pBuf);
        pBuf++;
        strLen--;
    }

    return str;
}

二、返回char* 类型

char digits[] =
{
    '0','1','2','3','4','5',
    '6','7','8','9','a','b',
    'c','d','e','f','g','h',
    'i','j','k','l','m','n',
    'o','p','q','r','s','t',
    'u','v','w','x','y','z'
};

char* ToBinaryString_Test(int i)
{
    char buf[32] = { 0 };
    //char buf[8] = { 0 };
    char* pBuf = buf;
    
    int charPos = 32;
    int radix = 1 << 1;   
    int mask = radix - 1;
    do
    {
        char a = digits[i & mask];
        pBuf[--charPos] = digits[i & mask]; // 与运算获取每次提取的数据
        i = i >> 1;
    } while (i != 0);
	
	// 需要在堆上分配空间。如果在栈上分配空间,函数执行完毕后,栈空间被释放,char* 指针指向的地址被释放后,会返回乱码。
    char* str = new char[33]{ 0 }; 
    int strLen = 32 - charPos;
    int zeroLen = 0;

    for(int i = 0; i < charPos; i++)
    {       
        str[i] = 48;
        zeroLen++;
    }
   
    pBuf = pBuf + charPos;
    while (strLen)
    {
        int a = (*pBuf);
        str[zeroLen] = (*pBuf);
        pBuf++;
        strLen--;
        zeroLen++;
    }
    str[32] = '\0';
    return str;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值