Преобразование строки в массив типа unsigned long long

Есть ли возможность в языке си переделать строку (char массив, состоящий только из цифр) в массив типа unsigned long long, где в каждом элементе массива будет храниться более одного элемента из исходной строки(например, строка 10..0, где 35 нулей будет помещена в mas[0] = 10..0, mas[1] = 0..0, в каждом элементе по 18 знаков). Спасибо!


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

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

ну можно вот так попробовать:

char* text;
int text_size;
// далее выделяем память под хранение текста

unsigned long long* numbers = (unsigned long long*)text;
// теперь по number[1] вы получите 8 букв от 7 до 15
→ Ссылка
Автор решения: MBo

Да, возможно. Набросок, для простоты использованы 16-разрядные слова, хранящие до 4 десятичных цифр.

Младшие разряды - в начале массива.

#include <stdio.h>

int main(void) {
     char* a = "1234567";
     unsigned short res[2] = {0};
     int charidx = strlen(a);   //начнём с последней - младшей цифры
     int ind = 0;
     unsigned short mul = 1;

     while(charidx) {       //пока не дошли до нуля
          //берём очередную цифру, получаем её значение, записываем в соответствующий десятичный разряд, домножая на mul - степень  десяти
        res[ind] += mul * (a[--charidx]  - '0');   

        //если не набрали 4 цифры (в случае длинных чисел - 18) 
        //переходим к следующему десятичному разряду
        if ((mul < 1000)) {
            mul *= 10;
        }
        else {
           //иначе переходим к следующему (ind) элементу массива - 
           //он  же есть квинтиллионичный разряд результата
            mul = 1;
            ind++;
        }
     }
     printf("%d %d", res[0], res[1]);
    return 0;
}

>> 4567 123
→ Ссылка