Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++_Binary_Decimal_Calculation - Fatal编程技术网

C++ 在C+中从二进制数到十进制数的转换+;

C++ 在C+中从二进制数到十进制数的转换+;,c++,binary,decimal,calculation,C++,Binary,Decimal,Calculation,我尝试构建一个函数,将存储在字符串中的二进制数计算为存储在long中的十进制数。我认为我的代码应该可以工作,但事实并非如此 在本例中,二进制数101110111的十进制数为375。但我的输出完全令人困惑 这是我的密码: #include <string> #include <stdio.h> #include <math.h> #include <iostream> #include <string.h> int main() {

我尝试构建一个函数,将存储在字符串中的二进制数计算为存储在
long
中的十进制数。我认为我的代码应该可以工作,但事实并非如此

在本例中,二进制数
101110111
的十进制数为
375
。但我的输出完全令人困惑

这是我的密码:

#include <string>
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string.h>

int main() {
    std::string stringNumber = "101110111";

    const char *array = stringNumber.c_str();
    int subtrahend = 1;
    int potency = 0;
    long long result = 0;

    for(int i = 0; i < strlen(array); i++) {
        result += pow(array[strlen(array) - subtrahend] * 2, potency);
        subtrahend++;
        potency++;
        std::cout << result << std::endl;
    }
}

我做错了什么?

你忘了把数字转换成整数。另外,您真的不需要使用C字符串

这里有一个更好的代码版本

int main() {
    std::string stringNumber = "101110111";

    int subtrahend = 1;
    int potency = 0;
    long long result = 0;

    for(int i = 0; i < stringNumber.size(); i++) {
        result += pow(2*(stringNumber[stringNumber.size() - subtrahend] - '0'), potency);
        subtrahend++;
        potency++;
        std::cout << result << std::endl;
    }
}
intmain(){
std::string stringNumber=“101110111”;
int subtrahand=1;
int效价=0;
长结果=0;
对于(int i=0;istd::cout您忘记了将数字转换为整数。另外,您真的不需要使用C字符串

这里有一个更好的代码版本

int main() {
    std::string stringNumber = "101110111";

    int subtrahend = 1;
    int potency = 0;
    long long result = 0;

    for(int i = 0; i < stringNumber.size(); i++) {
        result += pow(2*(stringNumber[stringNumber.size() - subtrahend] - '0'), potency);
        subtrahend++;
        potency++;
        std::cout << result << std::endl;
    }
}
intmain(){
std::string stringNumber=“101110111”;
int subtrahand=1;
int效价=0;
长结果=0;
对于(int i=0;istd::cout
'1'!=1
,如@churill评论中所述。
'1'==49
。如果您在linux上,请在终端中键入
man ascii
,以获取ascii表

试试这个,它是相同的代码。我只是直接使用了
stringNumber
,而不是对它使用
const char*
。我从当前索引中减去
'0'
'0'==48
,所以如果减去它,就得到实际的
1
0
整数值:

    auto sz = stringNumber.size();

    for(int i = 0; i < sz; i++) {
        result += pow((stringNumber[sz - subtrahend] - '0') * 2, potency);
        subtrahend++;
        potency++;
        std::cout << result << std::endl;
    }


'1'!=1
,如@churill评论中所述。
'1'==49
。如果您在linux上,请在终端中键入
man ascii
,以获取ascii表

试试这个,它是相同的代码。我只是直接使用了
stringNumber
,而不是对它使用
const char*
。我从当前索引中减去
'0'
'0'==48
,所以如果减去它,就得到实际的
1
0
整数值:

    auto sz = stringNumber.size();

    for(int i = 0; i < sz; i++) {
        result += pow((stringNumber[sz - subtrahend] - '0') * 2, potency);
        subtrahend++;
        potency++;
        std::cout << result << std::endl;
    }

c++方式

#include <string>
#include <math.h>
#include <iostream>


using namespace std;
int main() {
    std::string stringNumber = "101110111";   
    long long result = 0;

    uint string_length = stringNumber.length();

    for(int i = 0; i <string_length; i++) {
      if(stringNumber[i]=='1')
      {
        long pose_value = pow(2, string_length-1-i);        
        result += pose_value;
      }       
        
    }
    std::cout << result << std::endl;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
std::string stringNumber=“101110111”;
长结果=0;
uint string_length=stringNumber.length();
对于(inti=0;ic++方式

#include <string>
#include <math.h>
#include <iostream>


using namespace std;
int main() {
    std::string stringNumber = "101110111";   
    long long result = 0;

    uint string_length = stringNumber.length();

    for(int i = 0; i <string_length; i++) {
      if(stringNumber[i]=='1')
      {
        long pose_value = pow(2, string_length-1-i);        
        result += pose_value;
      }       
        
    }
    std::cout << result << std::endl;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
std::string stringNumber=“101110111”;
长结果=0;
uint string_length=stringNumber.length();

对于(int i=0;i可能不相关):您可以使用与
const char*
完全相同的
std::string,因为它重载了下标运算符
[]
。它甚至更好,因为它有
长度()
-您可以使用它来代替strlen
。您可以完全删除数组。还有一点提示:
'1'!=1
但是
'1'==49
请参见可能不相关的内容:您可以像
常量字符*
一样使用
std::string
,因为它重载了下标运算符
[]
。它甚至更好,因为它有一个
length()
-函数,您可以使用它来代替
strlen
。您可以完全删除
数组。还有一点提示:
'1'!=1
但是
'1'==49
请参阅