C++中将十进制转换为8位二进制的方法

5

我正在进行十进制转二进制的转换。我可以使用以下代码将其转换为二进制:

char bin_x [10];
itoa (x,bin_x,2);

但问题是,我想要得到8位的答案。而它给出的是,例如当x = 5时,输出将是101,但我想要00000101。

有没有办法在数组开头添加零?或者直接得到8位的答案?我是用C++编写的。


1
我删除了C标签,因为你说你是在用C++。 - Puppy
3个回答

12
在C++中,最简单的方法可能是使用std::bitset
#include <iostream>
#include <bitset>

int main() { 
    int x = 5;

    std::bitset<8> bin_x(x);
    std::cout << bin_x;

    return 0;
}

结果:

00000101


你能否稍微解释一下,我应该为“x”的值运行for循环吗? - bijlikamasla
@bijlikamasla:我不太确定你的问题是什么。如果你想生成不同的 x 值,那么使用 for 循环通常是一个合理的方法来生成它们。如果有帮助的话,我已经修改了代码,使其成为一个完整的程序,你可以运行它... - Jerry Coffin
我在想,是否有一种使用bitset将十六进制转换为二进制的方法? - bijlikamasla
@bijlikamasla: 使用类似strtol的函数将十六进制转换为整型,然后使用bitset将整型转换为二进制。 - Jerry Coffin

0

itoa()不是标准函数,因此如果您想编写可移植的代码,则最好不要使用它。

您也可以使用类似以下的内容:

std::string printBinary(int num, int bits) {
    std::vector<char> digits(bits);
    for (int i = 0; i < bits; ++i) {
        digits.push_back(num % 2 + '0');
        num >>= 1;
    }
    return std::string(digits.rbegin(), digits.rend());
}

std:: cout << printBinary(x, 8) << std::endl;

然而我必须同意使用bitset会更好。


谢谢。我在想,是否有一种使用bitset将十六进制转换为二进制的方法? - bijlikamasla
@bijlikamasla 您可以首先使用例如 sscanf 或 istream 的 >> 运算符将十六进制转换为字符串。然后像Jerry Coffin所写的那样使用位集。 - ssmir

0
要打印出一个数字的位,你需要执行以下操作:
//get the digit (in this case, the least significant digit)
short digit = number % 10; //shorts are 8 bits

//print out each bit of the digit
for(int i = 0; i < 8; i++){
    if(0x80 & digit) //if the high bit is on, print 1
        cout << 1;
    else
        cout << 0; //otherwise print 0
    digit = digit << 1; //shift the bits left by one to get the next highest bit.
}

1
我不太明白这个。你能否请稍微解释一下?我需要对它运行一个循环,以获取i的值吗?这里的“number”是什么意思?是指“X”吗? - bijlikamasla
它还给我以下错误:1> 错误 C2039:“bitset”:不是“std”的成员 2> 错误 C2065:“bitset”:未声明的标识符 3> 错误 C2064:项不会评估为接受1个参数的函数 - bijlikamasla
错误已经解决,我包含了它的头文件。但现在,它没有给我正确的输出。它给出的是:X的二进制形式=1001010,8位表示为0000000000000001000000100000001100000100000001010000011000000111。 - bijlikamasla
请在您的问题中发布您的代码。如果我看不到您的代码,我无法帮助您解决问题。 - David Weiser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接