首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将任意大小的大型Base-10数读入位集中

将任意大小的大型Base-10数读入位集中
EN

Stack Overflow用户
提问于 2018-06-11 09:17:39
回答 2查看 298关注 0票数 0

我想从字符串或标准输入中将base10数读入位集中。有没有什么std函数可以做到这一点,或者我必须自己实现它?

示例:

代码语言:javascript
复制
bitset<4> buffer;
cin >> buffer;
cout << buffer;

输入:5

输出: 0101

注意:我需要支持任何长度的输入,只要它适合在位集内

EN

回答 2

Stack Overflow用户

发布于 2018-06-11 11:54:36

您可以简单地使用std::bitset构造函数:

代码语言:javascript
复制
bitset( unsigned long val );

请注意,在没有提供足够位的情况下,结果将保留最低有效的N位。

例如。

代码语言:javascript
复制
std::bitset<2> set(5);
std::cout << set << std::endl;

01 (代替101)

票数 0
EN

Stack Overflow用户

发布于 2018-06-12 14:52:24

您可以使用boost multiprecision库来存储任意大小的整数,然后对其进行处理以生成二进制输出。

下面是使用库的代码,使用std::hex转换为十六进制,然后读取十六进制流并输出二进制流。我重载了bitset的>>,以便将大的十进制数读入位流。<<按照预期输出正确的二进制输出。你可以使用任何大小的位集(4的倍数),它应该可以工作。粗略地说,必须进行错误检查,以便它不会跨越位集大小。也许你可以从这个版本开始。

代码语言:javascript
复制
#include <boost/multiprecision/cpp_int.hpp>
#include<bitset>
#include<iostream>

using namespace std;


template<int N>
istream& operator >> (istream& in, bitset<N>& b)
{
    using namespace boost::multiprecision;
    cpp_int bigNumber;
    stringstream ss;
    in >> bigNumber; 
    ss << std::hex << bigNumber;


    b.reset();
    int i = 0;
    string s = ss.str();

    for (auto& iter = s.rbegin(); iter != s.rend();  iter++)
    {
        switch (toupper(*iter))
        {
         case '0':
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            break;
        case '1':
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            break;

        case '2':
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            break;

        case '3':
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            break;
        case '4':
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            break;
        case '5':
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            break;
        case '6':
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            break;
        case '7':
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            break;
        case '8':
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            break;
        case '9':
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            break;
        case 'A':
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            break;
        case 'B':
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            break;
        case 'C':
            b[i] = 0; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            break;
        case 'D':
            b[i] = 1; i++;
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            break;
        case 'E':
            b[i] = 0; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            break;
        case 'F':
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            b[i] = 1; i++;
            break;
        }
    }

    return in;
}

int main()
{

    std::bitset<80> b;

    cin >> b;
    cout << b << endl;

    system("pause");
    return 0;
}

程序输出:

代码语言:javascript
复制
9999999999999
00000000000000000000000000000000000010010001100001001110011100101001111111111111
Press any key to continue . . .
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50789423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档