Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将小数数组转换为二进制数数组?_C++_C - Fatal编程技术网

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

C++ 如何将小数数组转换为二进制数数组?,c++,c,C++,C,*我的数组是 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

*我的数组是

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位。

您希望它精确到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;
}

<代码> 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 i=ySyth.siz),i p>它取决于您使用的是C<代码> Print For(<代码> >函数或C++ + IoSoalsOuts.< /P>
#include <stdio.h>  // printf()
#include <iostream> // cout, endl
#include <iomanip>  // setw(), setfill()

int main(void) 
{
    double const d = 10;

    printf("%04.0f\n", d); 
    std::cout << std::setw(4) << std::setfill('0') << d <<std::endl;

    return 0;
}
#包括//printf()
#包括//cout,endl
#包括//setw(),setfill()
内部主(空)
{
双常数d=10;
printf(“%04.0f\n”,d);

std::cout计算机中的所有内容都已经是二进制格式,因此不需要转换任何内容

这是您在屏幕上以二进制表示方式打印数字的方式:

#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);
}
#包括
#包括
无效打印箱(大小项目、常量数组[项目])
{
对于(大小i=0;i>=1)
{
printf(数组[i]和掩码?“1”:“0”);
}
printf(“\n”);
}
}
内部主(空)
{
uint8_t数组[9]={2,2,10,3,1,15,12,6,1};
打印槽(sizeof(数组)/sizeof(*数组),数组);
}

这个例子可以很容易地修改,以创建特殊的“BCD ish”
array2
,而不是打印。

如果您想要二进制数的文本表示,那么为什么要返回一个
double
而不是
std::string
?您正在“转换”将一个数字转换为另一个数字,当以十进制形式写入时,该数字包含的数字与以二进制形式写入时原始数字包含的数字相同。也就是说,您正在“转换”二乘十,七乘一百一十一。如果需要一个数字序列,请使用数组或其他集合。从启用编译器警告开始。返回一个
double
,严重吗?发布编译的实际代码。