我正在进行十进制转二进制的转换。我可以使用以下代码将其转换为二进制:
char bin_x [10];
itoa (x,bin_x,2);
但问题是,我想要得到8位的答案。而它给出的是,例如当x = 5时,输出将是101,但我想要00000101。
有没有办法在数组开头添加零?或者直接得到8位的答案?我是用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
循环通常是一个合理的方法来生成它们。如果有帮助的话,我已经修改了代码,使其成为一个完整的程序,你可以运行它... - Jerry Coffinitoa()
不是标准函数,因此如果您想编写可移植的代码,则最好不要使用它。
您也可以使用类似以下的内容:
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
会更好。
sscanf
或 istream 的 >>
运算符将十六进制转换为字符串。然后像Jerry Coffin所写的那样使用位集。 - ssmir//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.
}