HEX to DEC
- Войдите на сайт для отправки комментариев
Вс, 27/10/2019 - 00:43
Как можно преобразовать HEX в DEC число?
Примерно:
HEX 7E007A88D2 в DEC 541173909714
Как можно преобразовать HEX в DEC число?
Примерно:
HEX 7E007A88D2 в DEC 541173909714
На калькуляторе в режиме программиста.
отличный вопрос для раздела "Программирование"
А умножить 2 на 3 никому не надо? - а то я умею
vank,
взять первый знак в HEX
если 0-9 то скопировать как есть
Если A-F то прибавить 10, нутыпонел A=10, B=11, F=15 (мне это удалось запомнить что есть самолёт такой F-15, единственный который мне удавалось посадить в игрульке под DOS)
удалить то что брали из HEX
если чото осталось то умножить то что получилось в DEC на 16 и т. д.
пока не кончится (подсказка: цикл while).
Эх. А если в HEX знаков 30? Никакой разрядности не хватит персчитать. Да и ТС не написал где ему надо это делать. Если в программе, которая введеный HEX должна в DEC перекинуть и вывести на экран, то если в разрядность long long укладывается, то проще собрать строку HEX, перевести её в uint_t и напечатать DEC. Не хватает исходных данных, что бы понять где, что и как собирается конвертить ТС.
если HEX у тебя в строковом представлении, то strtol(...) тебя спасёть.
https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__avr__stdlib_1gaf8ce3b8dae3d45c34c3b172de503f7b3.html
Может нужно HEX в BCD перевести..
Вообще-то нет HEX или DEC чисел. Есть лишь различные способы текстовой записи этих чисел.
Соответственно, если требуется одно текстовое представление числа заменить на другое, то нужно выполнить преобразование текста в число, а затем - обратно, но по другому основанию.
Я хочу читать RFID.
Я использую RFID модуль RDM6300 125kHz, UART
и Arduino Uno
Карты HEX номер 7E007A88D2, и я хочу, чтобы прочитать его
DEC номер 541173909714.
Я прочитал HEX 7E007A88D2. Преобразовать его в 541173909714DEC.
Я хочу, чтобы это число вывело на терминал
Я использую следующую часть программы:
long long x = 541173909714LL; // note the double LL
void setup()
{
Serial.begin(115200);
Serial.println("I am Arduino");
char buffer[100];
sprintf(buffer, "%0ld", x/1000000L);
Serial.print(buffer);
sprintf(buffer, "%0ld", x%1000000L);
Serial.println(buffer);
}
void loop() {}
Сначала нужно вывести число 541173
А потом 909714.
Но не работает.
Если у кого-то есть целая программа для тов, пожалуйста, помогите!
Странно. У меня на блюпиле отработало. Написало то что ожидалось. А на нане вот это
Перевело HEX в DEC и дало вывод сразу без использования буфера и sprinf.
Большое спасибо @ник182
У меня теперь другая проблема.
Когда я читаю данные карты, я записываю их в стринг.
Я могу записать их в стринговом массиве.
Я не знаю, как преобразовать их в число HEX, чтобы использовать это приложение.
Я применяю свой код.
Я прошу прощения, но я новичок в Ардуино и С
Дед в #5 всё дал.
vank - задержки в 16 и 22 строках уберите, с ними работать не будет.
Непонятно, зачем вы сначала переводите номер карты во стринг, если потом имеете проблему с преобразованием обратно... так не переводите.
Спасибо.
Я читал в интернете, но не могу этого сделать.
Если вы можете мне помочь.
Например, как я дал в предыдущем посте.
String s = = "7E007A88D2"
я хочу получить
long long x = 0x7E007A88D2
Спасибо за помощь!
@b707 Как Вы предлагаете это сделать?
@b707 Как Вы предлагаете это сделать?
что именно?
@b707
Непонятно, зачем вы сначала переводите номер карты во стринг, если потом имеете проблему с преобразованием обратно... так не переводите.
посмотрел - был неправ, у вас RFId c UART интерфейсом, он HEX в текстовом виде выдает. Тогда да - в сообщении #5 вам дали наводку, как преобразовывать
Я сожалею, но я не знаю, как это сделать.
Если вы можете помочь!
Я сожалею, но я не знаю, как это сделать.
Если вы можете помочь!
посмотрите вот эту ссылку
https://www.mschoeffler.de/2018/01/05/arduino-tutorial-how-to-use-the-rdm630-rdm6300-rfid-reader/
там есть код, а в конце кода функция hexstr_to_value() - это именно то, что вам нужно
Спасибо.
Я читал эту статью!.
Проблема во мне, что я хочу вывести длинный код.
Здесь выводится короткий код.
Например:
На карте записано: 7E007A88D2
И я хочу вывести монитор: 541173909714
Это не проблема. Примите уже мысль, что это одно и то же число. Не надо его ни как преобразовывать в представлении МК. Как бы Вы не скормили его МК в его внутреннем представлении всё равно это будет двоичное число. То, что Вы видите на экране это текстовое представление. Оно может быть НЕХ, DEC, OCT, BIN - это основные виды представлений, для которых написаны конверторы и которые можно использовать не напрягаясь на писание своих программ. Дед в #5 привел пример такой функции. Если ей скормить строку символов содержащую представление числа, то она пребразует эту строку во внутренее двоичное предеставление и присвоит переменной. Дальше значение этой переменной можно вывести на экран в любом представлении.
Должен заметить, что у ТС число из 5 байтов. Следовательно в long Ардуины не помещается. А для long long нет метода print. Написать его ничего не стоит, но не для ТС ;))))))
Ну так его обходят методом печати половинок long long.
Ну так его обходят методом печати половинок long long.
не только :)
Я пока искал для ТС ссылки - нашел как минимум три библиотеки ардуино для такого RFID - разной степени кривизны. Там авторы как только не изгаляются - один честно выводит только четыре байта, другой выводит больше, но читает реально тоже только четыре, а дальше добивает нулями :) только один из троих читает и выводит UID полностью
Привет!
Я выполнил свою задачу, используя специальную библиотеку для RDM6300.
Но я хочу понять, как превратить стринг в число.
Я не мог этого сделать. Я пробовал следующее, Но это не сработало.
Может ли кто-нибудь помочь мне-с учебной целью.
получаю 4294967295 а надо 541173909714
Не сработало потому что : unsigned long int strtoul (const char* str, char** endptr, int base);
Снова так:
получаю 4294967295 а надо 541173909714
Снова так:
;))))))))))
Видимо вечер пятницы удался?
vank - вместо того чтоб искать библиотеки, написанные криворукими программистами - вы бы лучше потратили время на чтения учебника по языку. Судя по всему, все ваше "решение задачи" заключается в копи-пасте стандартного примера. А то что вы тут пытаетесь писать сами для преобразования числа - чушь несусветная
Спасибо за комментарий.
Я сделал это для с++, но я не мог сделать это для Ардуино.
и я не знаю, сможет ли вообще.
Вот почему я так заинтересован.
Ардуино-мое хобби. Мне 62 года, и я делаю все для удовольствия.
Вот почему я так много спрашиваю.
Простите, если я кого-то обидел своими вопросами.
Я сделал это для с++, но я не мог сделать это для Ардуино.
не хорошо врать, особенно в 62 года.
Сможете продемонстрировать свое решение для С++ ?
@b707 пишет: Сможете продемонстрировать свое решение для С++ ?
и
ну если 62, то круто. Мне 50, я напишу тебе этот кусочек завтра... сегодня нельзя... ;))))
@wdrakula
Спасибо.
Да я набор 1957.
@b707 пишет: Сможете продемонстрировать свое решение для С++ ?
простите, но вынужден повторить - стыдно врать в 62 года. То что вы приводите как свой код - вы явно скопипастили в интернете без малейшего понимания. Было бы это ваше - вы бы не написали той чуши. что у вас в сообщении #27
Для справки - Ардуина программируется на языке С++, если вы можете решить задачу на С++ - можете и в ардуино
strtol() в AVR GCC возвращает uint32_t, т.е всего 4 байта максимум. strtoll() у AVR нет.
мошт тебе надо разбить сначала твой uint64_t на два uint32_t?
Так у него и uint64-то не выходит получить.
Может я avrlib не до конца еще дочитал, но, кажется, нет там требуемых функций, оперирующих long long. Или свое изобретать надо или библиотеку rfid-а менять / править.
PS. вижу, уже выяснили, что девайс в HEX-string выдает ID. Тогда в чем проблема при шифтовании long long влево и докладывании в него очередного ниббла?
Вот, как бы обещал. Всё иллюстративно и "на коленке".
Десятичный вид не напечатает весь диапазон. Это тебе "домашнее задание". ;))
Без 0x, только заглавные).
result = (result<<4) + (str[i] <=
'9'
? str[i] -
'0'
: toupper(str[i]) -
'A'
+ 10);
Да, но у него там всё равно заглавные.
Да, но у него там всё равно заглавные.
Сегодня да. А зафтра?:-)
Да, но у него там всё равно заглавные.
Сегодня да. А зафтра?:-)
Пусть ТС сам мозг включит.
Уважаемый @wdrakula
Спасибо за программу, которую вы отправили.
Очень красиво и подробно вы все написали.
Я положил мой стринг "0х"7E007A88D2""
и теряются две нули.
Вот ответ на монитор:
2 7 07
3 E 07E
4 0 07E0
5 0 07E00
6 7 07E007
7 A 07E007A
8 8 07E007A8
9 8 07E007A88
10 D 7E007A88D
11 2 7E7A88D2
12 7E7A88D2
Сначало было слово:0x7E007A88D2
Потом появилось число:
0x7E7A88D2 HEX
541173909714 DEC
Это потому, что две нули находятся в начале и являются
незначительными нулями, и программа игнорирует их. Правда?
Но, наконец, ответ верный 541173909714
Для меня было очень полезно посмотреть, как все происходит шаг за шагом.
Еще раз спасибо, что помогли мне!
Уважаемый @Green и @DetSimen
Большое спасибо за вашу программу.
Она также прекрасно работает
Большое спасибо за помощь всем!
незначительными нулями, и программа игнорирует их. Правда?
Без привязки к Ардуино:
А вот мой способ: (как пример)
result = (result<<4) + (str[i] <=
'9'
? str[i] -
'0'
: toupper(str[i]) -
'A'
+ 10);
Дед, вот чувствуется, что написание программ ты начинал с функции обработчика ошибок )))
Привет!
Можно использовать библиотеку PriUint64.h
https://github.com/yoursunny/PriUint64
Ответ
7E007A88D2
541173909714
7700036504322
111111000000000011110101000100011010010
7E007A88D2
541173909714
7700036504322
111111000000000011110101000100011010010