【问题标题】:Using char* in C++ for conversion from binary to decimal and decimal to binary在 C++ 中使用 char* 进行二进制到十进制和十进制到二进制的转换
【发布时间】:2014-02-17 20:16:55
【问题描述】:

更新:

char* DecToBin(int n){
    char* ptr = new char[];
    char* CharReturn = new char[9];
    CharReturn[0] = n % 2;
    CharReturn[1] = n % 3;
    ptr = CharReturn;
    return ptr;
}

其他一切都弄清楚了,但我无法让这个 char* 返回任何实际值。如何为 char*(pointer) 分配内存。如何实现像 (x & 1)、(x >> 1) 之类的位函数,以及如何使用 (x == 0),类似于 for 循环中的参数?

原始问题


感谢您阅读我的问题。我的编程课有一个问题,需要使用char* 使用switch 语句将二进制转换为十进制和十进制转换为二进制,到目前为止我的代码非常粗糙,根本没有完成。我在理解char* 的使用时遇到问题,程序必须使用函数

int BinToDec(char* s);

char* DecToBin(int n); 

我是一名初级程序员,这是我的第三个学期,我从未使用过 C++ 编程。这个作业是针对我的 CPS 260,在汇编课上编程的。我尽力做到最好,我主要想知道我是否朝着正确的方向努力。我知道查找二进制和十进制的算法很粗糙。

代码:

#include <iostream>
using namespace std;

int BinToDec(char* s);
char* DecToBin(int n);

int BinToDec(char* BinIn){

    int intOut = 0;
        intOut = intOut + BinIn[0] * 128;
        intOut = intOut + BinIn[1] * 64;
        intOut = intOut + BinIn[2] * 32;
        intOut = intOut + BinIn[3] * 16;
        intOut = intOut + BinIn[4] * 8;
        intOut = intOut + BinIn[5] * 4;
        intOut = intOut + BinIn[6] * 2;
        intOut = intOut + BinIn[7] * 1;
        return intOut;
}

char* DecToBin(){

    unsigned int intInput, Holder;
    char charReturn[7];
    char* ptr;

    cout << "Please Enter the num number you wish to convert to Binary. \n";
    cin >> intInput;
    Holder = intInput % 2;
    charReturn[0] = Holder;
    Holder = intInput / 2;
    charReturn[1] = Holder % 2;


    ptr = charReturn;
    return ptr;
}

int main()
{
    bool done = false;
    unsigned short int intSelect;

    while (!done)
    {
        cout << "Please select a conversion type: \n";
        cout << "1. Convert from Binary to Decimal \n";
        cout << "2. Convert from Decimal to Binary \n";
        cout << "3. Exit the program. \n";
        cin >> (intSelect);

        switch (intSelect)
        {
        case 1: //How to call BinToDec()
        {
        char* Input;
        cout << "Please enter the 8-bit binary:\n";
        cin >> (Input);
        BinToDec(Input);
        break; }

        case 2: //How to call DecToBin()
        {cout << "case 2\n";
        cout << DecToBin();
        system("pause");
        break; }

        case 3: //Exit
        {cout << "The Program will now exit\n";
        system("pause");
        done = true;
        break; }

        default: //Check others
        {cout << "Invalid Entry try again. \n\n";
        return 0;
        }
        }

    }
    cout << "\n\n";
    return 0;
}

任何意见都会非常有建设性,即使它说我是一个糟糕的程序员并且朝着完全错误的方向前进。 提前谢谢你,即使你没有回复。

附:我用 Java 和 Visual Basic 编程,没有 C++ 经验,并且仍在研究函数的使用。您必须先声明它们吗?

【问题讨论】:

  • 另一门 C++ 课程强制您使用 char* 而不是字符串?天哪。
  • 关于主题的更多信息,我将尝试写一些有用的注释: 1) C++ 要求您初始化变量 -> charReturn[7] 是一个由 7 个字符组成的数组,其中包含未定义的值目前正在使用它。您需要以 0 (\0) 结尾,因为 C 样式字符串 (char*) 只是一个包含许多字符的数组,其中 0 表示字符串的结尾。它也是本地分配的,所以如果你返回指向数组的指针,你会得到垃圾值。 (您需要为其分配堆,查找mallocnew。)您还需要分配更多空间。 ;-)
  • 函数中的字符串和 char* 是否相似,该类用于汇编,正在使用 C++ 进行高级编程。如果这对使用 char* 更有意义。感谢您的答复。编辑:我将它存储为 [7] 的数组,因为我在想 0-7,我们只需要转换 8 位二进制数。 [8] 的数组是否更合适,我将研究 malloc,new,我一直在寻找 cout
  • 2) 通常的约定是尽可能清楚地说明您想要发生的事情。您并没有完全这样做:不要使用% 2/ 2,而是使用位操作。 (因为这基本上就是你正在做的事情:取最低位(x &amp; 1),将数字向下移动(x &gt;&gt; 1),重复直到消耗完整个数字(x == 0)。(顺便说一句,你应该做dec- >使用循环进行bin转换。)3)如果没有给定的char*指向有效的malloc-ed或new-ed内存,std::cin &gt;&gt; &lt;char*&gt;将不起作用。这应该可以帮助您入门。 (请注意,这不是详尽的清单,只是乍一看)
  • 我试图让基本原理在没有复杂循环的情况下工作,一旦我弄清楚了我会使用循环,再次感谢您的快速回复和帮助!

标签: c++ binary char decimal


【解决方案1】:

假设二进制整数的长度不超过 8 位。

调用 BinToDec()

char Input[9];
cout << "Please enter the 8-bit binary:\n";
cin >> (Input);
cout << BinToDec(Input);

你需要创建一个至少有 8+1 个元素的 char 数组,char 数组字符串的最后一个元素总是 0。

int BinToDec(char* BinIn){

    int intOut = 0;
    intOut = intOut + (BinIn[0]-'0') * 128;
    //convert '0' or '1' to 0 or 1.
    intOut = intOut + (BinIn[1]-'0') * 64;
    intOut = intOut + (BinIn[2]-'0') * 32;
    intOut = intOut + (BinIn[3]-'0') * 16;
    intOut = intOut + (BinIn[4]-'0') * 8;
    intOut = intOut + (BinIn[5]-'0') * 4;
    intOut = intOut + (BinIn[6]-'0') * 2;
    intOut = intOut + (BinIn[7]-'0') * 1;
    return intOut;
}

DecToBin() 内部

unsigned int intInput, Holder;
//char charReturn[7];
//if you make it 7, you can only convert from 0-63
char* ptr;
char* charReturn = new char[9];

cout << "Please Enter the num number you wish to convert to Binary. \n";
cin >> intInput;
Holder = intInput % 2;
charReturn[0] = Holder+'0';
//Holder is 0 or 1, you need to convert it to '0' or '1'
Holder = intInput / 2;
charReturn[1] = Holder % 2+'0';
//...
charReturn[8] = 0; //last character is 0 in char* style string.
ptr = charReturn;
return ptr;

你需要使用newmalloc创建一个数组,以便函数返回后存储在内存中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2023-04-11
    • 1970-01-01
    • 2013-05-14
    • 2019-04-09
    相关资源
    最近更新 更多