如何将小数数组转换为二进制数数组



>*我有的数组是

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;
}

相关内容

  • 没有找到相关文章