Получить число из массива 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