Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

64 bit integer in C

626  
Бортэ-Чино прохожий03.11.10 12:15
Бортэ-Чино
NEW 03.11.10 12:15 
Уважаемые форумчане,
Помогите решить проблему:
Как перевести hex в int большое число
0001F90000000002 --> 64 bit unsigned
Програмирование на Си в юниксе
Благодарен за помощь
#1 
kitov знакомое лицо03.11.10 14:21
NEW 03.11.10 14:21 
в ответ Бортэ-Чино 03.11.10 12:15
если компилятор держит c99, то пользуйтесь long long
#2 
Бортэ-Чино прохожий03.11.10 15:06
Бортэ-Чино
NEW 03.11.10 15:06 
в ответ kitov 03.11.10 14:21
К сожалению не поддерживает :-(
#3 
pkrasnop pkrasnop03.11.10 15:11
pkrasnop
NEW 03.11.10 15:11 
в ответ Бортэ-Чино 03.11.10 15:06
Возможно
struct { int b,l; } ?
#4 
anly старожил03.11.10 15:16
anly
NEW 03.11.10 15:16 
в ответ Бортэ-Чино 03.11.10 12:15
0001F90000000002 - это стринг?
и этот стринг нужно преобразовать в беззнаковое целое 64 разряда? Т.е. (ввиду того что беззнаковое целое только 32 разряда) в два по 32. т.е. сохранить в 8ми байтах.
я правильно понял?
Проклят нарушающий межи ближнего своего (Втор.27:17)
#5 
Бортэ-Чино прохожий03.11.10 15:19
Бортэ-Чино
NEW 03.11.10 15:19 
в ответ anly 03.11.10 15:16
Да верно
Ответ : 555253372026882
Но как это перевести в Си ?
#6 
Бортэ-Чино прохожий03.11.10 15:23
Бортэ-Чино
NEW 03.11.10 15:23 
в ответ pkrasnop 03.11.10 15:11
Принимаются все решения :-)
#7 
Simple Nothing is f*cked03.11.10 15:25
Simple
NEW 03.11.10 15:25 
в ответ Бортэ-Чино 03.11.10 12:15
double?
#8 
anly старожил03.11.10 15:55
anly
NEW 03.11.10 15:55 
в ответ Бортэ-Чино 03.11.10 15:19, Последний раз изменено 03.11.10 15:56 (anly)
555253372026882 - это текстовое представление тех 8ми байтов. А это уже другая задача: преобразования беззнакового 64аразрядного целого в текстовый(стринговый) десятичный вид.
для этого придётся самому функцию написать.
А вот первая задача (преобразования стрингового 16ричного числа в 64хразрядное беззнаковое целое ) довольно проста.
в цикле преобразовывать каждый байт отдельно и сохранять сдвигая и делая OR с предыдущим резултатом (исходное состояние 0)
Проклят нарушающий межи ближнего своего (Втор.27:17)
#9 
Бортэ-Чино прохожий03.11.10 16:19
Бортэ-Чино
NEW 03.11.10 16:19 
в ответ anly 03.11.10 15:55
А по точнее можно? Что то не могу понять
#10 
Murr_0001 завсегдатай03.11.10 16:46
Murr_0001
NEW 03.11.10 16:46 
в ответ Бортэ-Чино 03.11.10 15:19
Но как это перевести в Си ?
------
Ты бы определился с тем, что именно тебе надо сделать:
- читать, хранить и выводить 64-битные целые значения
или
- выполнить преобразование строки "0001F90000000002" (хех) в "555253372026882" (dec)
или
- написать преобразователь строки представляющей 64-битный хех в строку с десятичным аналогом...
#11 
Бортэ-Чино прохожий03.11.10 17:14
Бортэ-Чино
NEW 03.11.10 17:14 
в ответ Murr_0001 03.11.10 16:46
написать преобразователь строки, представляющей 64-битный hех в строку с десятичным аналогом на Си
Input: "0001F90000000002" (hех)
Output: "555253372026882" (dec)
данные нигде хранить не надо.
#12 
Murr_0001 завсегдатай03.11.10 17:26
Murr_0001
NEW 03.11.10 17:26 
в ответ Бортэ-Чино 03.11.10 17:14
Тогда пишешь прямо по определению процедуры преобразования - получить символ разряда, конвертнуть во вторую систему, сложить с остатком, вычленить значимую часть для вывода и запомнить остаток... Там больших промежуточных, более трех значимых цифр, нигде не случается...
#13 
Бортэ-Чино прохожий03.11.10 17:34
Бортэ-Чино
NEW 03.11.10 17:34 
в ответ Murr_0001 03.11.10 17:26
можно маленькuй пример ....
#14 
Murr_0001 завсегдатай03.11.10 17:43
Murr_0001
03.11.10 17:43 
в ответ Бортэ-Чино 03.11.10 17:34
Прикладная Теория Цифровых Автоматов - такой предмет изучался?
Там один из разделов как раз этим занимается.
Эээ... если не поймешь в ПТЦА, то посмотри описание команды DAA для I8080A.
#15 
Бортэ-Чино прохожий03.11.10 17:54
Бортэ-Чино
NEW 03.11.10 17:54 
в ответ Murr_0001 03.11.10 17:43
благадарю за дельный совет.
как будет время так непременно займусь теорией .....
#16