Преобразование строки в массив типа 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