Как конвертировать char [] из чисел в целое число? - PullRequest
0 голосов
/ 04 мая 2011

Предположим, у меня есть:

Operand[2][4] = {{"1", "2", "3", "4"},{"5", "6", "7", "8"}};

, и у меня есть некоторые битовые переменные, называемые Operand1_sign и Operand2_sign (0: положительный и 1: отрицательный), предположим, что они:

Operand1_sign = 0;
Operand2_sign = 1;

Как можноЯ преобразовал это в 2 целых числа и применил к ним некоторую операцию (например, суммирование)

т.е.

signed int Operand1, Operand2, Result;

, так что в итоге я могу получить следующее:

Operand1 = + 1234;
Operand2 = - 5678;
Result = Operand1 + Operand2;

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Вместо ответа я дам вам подсказку: число 1234 также можно выразить как 1 * 1000 + 2*100 + 3*10 + 4*1 - это ключ к разбору чисел:)

0 голосов
/ 04 мая 2011

Я мог бы предложить это:

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

int my_atoi(char* operand, int bufsize, int sign)
{
    char* value = new char[bufsize+1];
    memcpy(value, operand, bufsize);
    value[bufsize] = '\0';
    int ret = 0;
    sscanf(value, "%d", &ret);
    if (sign < 0)
    {
        ret = -ret;
    }
    delete [] value;
    return ret;
}

void main()
{
    char Operand[2][4] = {{'1', '2', '3', '4'},{'5', '6', '7', '8'}};
    signed int Operand1 = my_atoi(Operand[0], 4, 1);
    signed int Operand2 = my_atoi(Operand[1], 4, -1);
    signed int Result = Operand1 + Operand2;
}

Однако, я определенно рекомендую вам получить ваши строки как строки с нулевым символом в конце.В этом случае вы можете пропустить ручную реализацию my_atoi и просто сделать:

#include <stdlib.h>

void main()
{
    char Operand[2][5] = {{'1', '2', '3', '4', '\0'},{'5', '6', '7', '8', '\0'}};
    signed int Operand1 = atoi(Operand[0]);
    signed int Operand2 = -atoi(Operand[1]);
    signed int Result = Operand1 + Operand2;
}
...