C++ c+中的十进制到8位二进制转换+;

C++ c+中的十进制到8位二进制转换+;,c++,binary,C++,Binary,我正在研究十进制到二进制的转换。我可以使用 char bin_x[10]; itoa(x,bin_x,2); 但问题是,我想要8位的答案。它给了我,例如x=5,所以输出是101,但我想要00000101。 有没有办法在数组的开头追加零?或者可以直接得到8位的答案吗?我正在用C++执行此操作要打印出一位数字的位,您需要执行以下操作: //get the digit (in this case, the least significant digit) short digit = number %

我正在研究十进制到二进制的转换。我可以使用 char bin_x[10]; itoa(x,bin_x,2); 但问题是,我想要8位的答案。它给了我,例如x=5,所以输出是101,但我想要00000101。
有没有办法在数组的开头追加零?或者可以直接得到8位的答案吗?我正在用C++

执行此操作要打印出一位数字的位,您需要执行以下操作:

//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.
}
//获取数字(在本例中为最低有效位)
短数字=数字%10//短裤是8位的
//打印出数字的每一位
对于(int i=0;i<8;i++){
if(0x80&digit)//如果高位为on,则打印1

C++中的CUT

,最简单的方法可能是使用<代码> STD::BITSET >:

#include <iostream>
#include <bitset>

int main() { 
    int x = 5;

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

    return 0;
}
#包括
#包括
int main(){
int x=5;
std::位集bin_x(x);
std::cout
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;
std::string printBinary(int-num,int-bits){
std::矢量数字(位);
用于(int i=0;i<位;++i){
数字。推回(数字%2+'0');
num>>=1;
}
返回std::string(digits.rbegin(),digits.rend());
}

std::难道我不明白这个。你能解释一下吗。我可以在它上面运行一个循环吗,对于i的值?这里的“数字”是什么?是“X”?它还给了我以下错误:1>错误C2039:“位集”:不是“std”的成员2>错误C2065:“位集”:未声明的标识符3>错误C2064:在我包含其头文件后,term不会对使用1个参数的函数求值。错误已解决。但现在,它没有给我正确的输出。它给出:二进制形式的X=1001010和8位表示是000000000000000 100000 10000 100000 10000 100000 010100000 0100000 111:请在您的问题中张贴代码。如果我看不到您的代码,我不能帮助您的代码。我删除了C标记,因为您声明您在C++中这样做。请您解释一下,我是否应该为x值运行循环??@bijlikamasla:我不太清楚你在问什么。如果你想生成不同的
x
,那么是的,
for
循环通常是一种合理的生成方法。如果有帮助的话,我已经修改了代码,这样你就可以运行完整的程序了……我想知道,是否有办法将十六进制转换为二进制ary使用位集?@bijlikamasla:使用strtol之类的东西将十六进制转换为整数类型,然后使用位集将整数类型转换为二进制。谢谢。我想知道,是否有什么方法可以使用位集将十六进制转换为二进制?@bijlikamasla您可以首先使用
sscanf
或istream的
> 运算符。以及Jerry Coffin所写的使用位集