Получить число из массива char

Есть массив символов ['\033', '[', '1', '5', '~']

нужно перевести его в число 27914953126, это коды ASCII символов


Ответы (2 шт):

Автор решения: Sergey

TS изложил вопрос очень туманно, но сильно подозреваю, что речь шла об интерпретации четырёх подряд расположенных байт в памяти компа то как целого числа, а то как отдельных байт. Нечто вроде:

#include <stdio.h>

union int_to_arr {
    int int_value;
    char char_value[4];
};

int main(int argc, char *argv) {

    union int_to_arr z;
    
    // На РС порядок байт little-endian !!!

    // Целое число рассматриваем как 4 байта
    z.int_value = 2710;
    printf("Массив char: %d %d %d %d\n", z.char_value[0], z.char_value[1], z.char_value[2], z.char_value[3]);
    printf("Массив char: %x %x %x %x\n", z.char_value[0], z.char_value[1], z.char_value[2], z.char_value[3]);
    
    // 4 байта рассматриваем как целое
    z.char_value[0] = 11;
    z.char_value[1] = 22;
    z.char_value[2] = 33;
    z.char_value[3] = 44;
    printf("Переменная int: %d\n", z.int_value);
    printf("Переменная int: %x\n", z.int_value);    
}
→ Ссылка
Автор решения: wololo

Полагаю, у автора вопроса есть массив целых неотрицательных чисел, который он пытается "склеить" в одно большое число, как в примерах ниже:

{1} => 1,
{1, 2, 3} => 123,
{101, 0, 42, 314, 271} => 101042314271

Сделать это можно, например, так:

#include <stdio.h>
#include <stddef.h>
#include <limits.h>

typedef int src_type;
typedef unsigned long long dst_type;
const dst_type DST_MAX = ULLONG_MAX;

dst_type array_to_number(const src_type* arr, size_t arr_size)
{
    const dst_type OVERFLOW_VALUE1 = DST_MAX / 10;
    const dst_type OVERFLOW_VALUE2 = DST_MAX;

    dst_type res = 0;
    for (size_t i = 0; i < arr_size; ++i)
    {
        src_type val = arr[i];
        src_type coef = 1;

        while (val > 9)
        {
            coef *= 10;
            val /= 10;
        }

        val = arr[i];
        while (coef > 0)
        {
            src_type digit = val / coef;
            val = val - digit * coef;
            coef /= 10;

            if (res > OVERFLOW_VALUE1)
            {
                //TODO: Ошибка! Результирующее значение невозможно поместить в тип dst_type.
                return 0;
            }
            res *= 10;
            if (res > OVERFLOW_VALUE2 - digit)
            {
                //TODO: Ошибка! Результирующее значение невозможно поместить в тип dst_type.
                return 0;
            }
            res += digit;
        }
    }
    return res;
}

int main()
{
    {
        src_type arr[5] = {'\033', '[', '1', '5', '~'};
        dst_type res = array_to_number(arr, 5);
        printf("%llu\n", res);
    }
    {
        src_type arr[5] = {101, 0, 42, 314, 271};
        dst_type res = array_to_number(arr, 5);
        printf("%llu\n", res);
    }

    return 0;
}

Вывод:

27914953126
101042314271
→ Ссылка