>*我有的数组是
int array{9} = { 2 ,2, 10 , 3 , 1, 15, 12, 6 ,1};
我试图将其隐藏成一个二进制数组,这应该是这样的
int array2[35]= {0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,0, 0, 1, 1, 0, 0, 0, 1};
我使用的代码是:
double decimal2Binary(long m)
{
int remainder;
long binary = 0, i = 1;
while(m != 0)
{
remainder = m%2;
m = m/2;
binary= binary + (remainder*i);
i = i*10;
}
return binary;
}
问题是,当我将 2 转换为二进制时,输出为 10。但我希望它是 0010,同样对于 7,它给出 111 代替 0111。我还需要做什么。请帮忙*
如果我理解您的代码,从 int=7 开始,您需要一个 int=111 (100+10+1(,打印时显示为 0111。这是一个格式问题,而不是转换,看看 printf(( 如何添加最多 4 位数字的前导零。
0010
在C++中不是有效的数字。然后有很多方法可以做你想做的事情,这取决于你将如何使用这些二进制数。
a. 使用 std::string(或 C 样式 char* 数组(并迭代完成缺少的 0。你必须首先将你的数字转换为字符串标记(可能使用 boost::lexical_cast 或简单地使用 istringstream(,将它们放入 std::string 中,然后执行以下操作:
for (int i=mystring.size(); i<4; i++) mysting.push_front("0");
二.您可以使用二维数组,每个二进制数都表示为 int[4]。
c. 使用 std::bitset (http://www.cplusplus.com/reference/bitset/bitset/( 你可以有一个 std::bites<4> 的数组(或 std::vector( - 每个数组表示一个 4 位二进制数 - 或者直接使用 std::bites<35>(在你的示例中(,并确保在适当的时候自己添加缺少的 0。
我绝对建议您为二进制数使用某种专用类型(std::bites<4>或char[4]或int[4],甚至是bool[4]或自定义结构(,然后使用这种类型的数组。这样的代码最好维护,也更好读。
这取决于您是使用 C printf()
函数还是C++ iostreams 进行输出。
#include <stdio.h> // printf()
#include <iostream> // cout, endl
#include <iomanip> // setw(), setfill()
int main(void)
{
double const d = 10;
printf("%04.0fn", d);
std::cout << std::setw(4) << std::setfill('0') << d <<std::endl;
return 0;
}
对于两者,输出都是0010
。
计算机中的所有内容都已经是二进制格式,因此无需转换任何内容。
这是您用二进制表示在屏幕上打印数字的方式:
#include <stdio.h>
#include <stdint.h>
void print_bin (size_t items, const uint8_t array[items])
{
for(size_t i=0; i<items; i++)
{
for(uint8_t mask=0x80; mask!=0; mask>>=1)
{
printf(array[i] & mask ? "1" : "0");
}
printf("n");
}
}
int main (void)
{
uint8_t array[9] = {2, 2, 10, 3, 1, 15, 12, 6, 1};
print_bin(sizeof(array)/sizeof(*array), array);
}
可以轻松修改此示例以创建特殊的"BCD-ish"array2
,而不是打印。
您希望它是精确的 4 个二进制数字?
double decimal2Binary(long m)
{
int remainder;
long binary = 0, i = 1;
while(m != 0)
{
remainder = m%2;
m = m/2;
binary= binary + (remainder*i);
i = i*10;
}
return binary;
}
这个函数很棒,但如你所知,你使用了很长时间的函数。那么如何获得精确的 4 位二进制呢?使用字符串
警告,将此函数转换为 4 位字符串会导致函数最大处理数为 1111 -> 15
string decimal2Binary(long m)
{
int remainder;
string binary = "";
while(m != 0)
{
remainder = m%2;
m = m/2;
if(remainder == 0){
binary = '0' + binary;
}
else{
binary = '1' + binary;
}
}
while(binary.size() != 4){
binary = '0' + binary;
}
return binary;
}