Конвертация HEX в Long
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Привет всем !
Есть прекрасная функция LongToHEX() для конвертации числа из 10-чной в 16-тиричную систему исчисления.
А есть ли обратная функция ?
Есть строка 'ABCD' - можно ли как-то просто получить 10-тичное значение ?
Понятно, что можно распарсить в цикле с младшего разряда ... но неужели нет готового метода ?
Заранее спасибо !
Есть прекрасная функция LongToHEX() для конвертации числа из 10-чной в 16-тиричную систему исчисления.
А есть ли обратная функция ?
Есть строка 'ABCD' - можно ли как-то просто получить 10-тичное значение ?
Понятно, что можно распарсить в цикле с младшего разряда ... но неужели нет готового метода ?
Заранее спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Конвертация HEX в Long
Код: Выделить всё
sHexStr STRING('ABCD')
x = EVALUATE('0' & sHexStr & 'h')
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Всё работает. Теперь удалось сделать отображение версий DLL в человекочитабельном виде.
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Конвертация HEX в Long
0x353Eh это сразу во всех форматах, надо либо 0x353E (c/c++), либо 0353Eh (Clarion).
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Спасибо. Сделал вариант 0x353E - думаю сисадминам он более понятен, чем Clarion'новский.
За теми кто отстал - не возвращаться. (С) Кодекс
-
- ✯ Ветеран ✯
- Сообщения: 5006
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Конвертация HEX в Long
У меня тоже есть такая же конвертация. Через evaluate. Только забыл зачем этот evaluate там нужен? Старость - не радость. Может здесь это уже обсуждали? Не мог же я сам это придумать?
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Конвертация HEX в Long
Пока не сталкивался, но все равно интересно, как вы проверяете?Игорь Столяров писал(а): ↑04 Ноябрь 2021, 11:45 Всё работает. Теперь удалось сделать отображение версий DLL в человекочитабельном виде.
В основном app.exe или дополнительного? И если можете, поделитесь кусочком кода сего чуда Спасибо заранее.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Забавно вышло, но нашёл ответ на свой вопрос вот здесь: https://github.com/deesoftprog/Clarion-Hint-library
И вообще, интересный раздел мелких функций в исходниках ... Вот это точно можно было бы в FAQ добавить.
И вообще, интересный раздел мелких функций в исходниках ... Вот это точно можно было бы в FAQ добавить.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Нашёл интересный, и наверно оптимальный, вариант сабжа !
Код: Выделить всё
HexToLong PROCEDURE (String pHex) !,Long
RetVal Long,Auto
Code
pHex = Upper(pHex)
RetVal = InString(Sub(pHex,Len(Clip(pHex)),1),'123456789ABCDEF',1)
If Len(Clip(pHex)) > 1
RetVal += 16 * HexToLong(Sub(pHex,1,Len(Clip(pHex)) - 1))
end
Return RetVal
За теми кто отстал - не возвращаться. (С) Кодекс
- Дед Пахом
- Старичок
- Сообщения: 3137
- Зарегистрирован: 07 Июль 2005, 16:51
- Откуда: Москва, Россия
- Благодарил (а): 11 раз
- Поблагодарили: 32 раза
- Контактная информация:
Конвертация HEX в Long
Ну с рекурсией так себе скорость будет. Да ещё эти Clip, Len, InString явно не убыстряют.
С уважением, ДП
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Здесь рекурсия предсказуемая ... В принципе, её мона заменить на цикл Len(pHex) по строке.
За теми кто отстал - не возвращаться. (С) Кодекс
- Игорь Столяров
- Ветеран движения
- Сообщения: 7419
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 16 раз
- Поблагодарили: 50 раз
Конвертация HEX в Long
Здесь нет халявщиков и мониторщиков ! На вскидку без рекурсии:
Быстрее кусать строку как массив, но мы за безопасный код !
Код: Выделить всё
ZINT::HexToLong Procedure(String pHex) !,Long
RetVal Long(0)
lCoef Long(1)
bCount Byte,Auto
Code
Loop bCount = Len(pHex) to 1 by -1
RetVal += InString(Upper(Sub(pHex,bCount,1)),'123456789ABCDEF',1) * lCoef
lCoef *= 16
end
Return RetVal
За теми кто отстал - не возвращаться. (С) Кодекс