Конвертация HEX в Long

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Привет всем !

Есть прекрасная функция LongToHEX() для конвертации числа из 10-чной в 16-тиричную систему исчисления.

А есть ли обратная функция ?
Есть строка 'ABCD' - можно ли как-то просто получить 10-тичное значение ?

Понятно, что можно распарсить в цикле с младшего разряда ... но неужели нет готового метода ? :(
Заранее спасибо !
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Конвертация HEX в Long

Сообщение Дед Пахом »

Код: Выделить всё

sHexStr   STRING('ABCD')
x = EVALUATE('0' & sHexStr & 'h')
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Неожиданно. Спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Всё работает. Теперь удалось сделать отображение версий DLL в человекочитабельном виде. :)

1.jpg
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Конвертация HEX в Long

Сообщение Дед Пахом »

0x353Eh это сразу во всех форматах, надо либо 0x353E (c/c++), либо 0353Eh (Clarion).
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Спасибо. Сделал вариант 0x353E - думаю сисадминам он более понятен, чем Clarion'новский. :)
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Конвертация HEX в Long

Сообщение kreator »

У меня тоже есть такая же конвертация. Через evaluate. Только забыл зачем этот evaluate там нужен? Старость - не радость. :mrgreen: Может здесь это уже обсуждали? Не мог же я сам это придумать? :shock: :mrgreen:
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Конвертация HEX в Long

Сообщение gopstop2007 »

Игорь Столяров писал(а): 04 Ноябрь 2021, 11:45 Всё работает. Теперь удалось сделать отображение версий DLL в человекочитабельном виде. :)
Пока не сталкивался, но все равно интересно, как вы проверяете?
В основном app.exe или дополнительного? И если можете, поделитесь кусочком кода сего чуда :roll: Спасибо заранее.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

gopstop2007 писал(а): 04 Ноябрь 2021, 14:59 И если можете, поделитесь кусочком кода сего чуда
Идите Вы вот сюда: viewtopic.php?f=1&t=4844
А я там сейчас пример добавлю ... :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Забавно вышло, но нашёл ответ на свой вопрос вот здесь: https://github.com/deesoftprog/Clarion-Hint-library
И вообще, интересный раздел мелких функций в исходниках ... ;) Вот это точно можно было бы в FAQ добавить. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация 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  
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Конвертация HEX в Long

Сообщение Дед Пахом »

Ну с рекурсией так себе скорость будет. Да ещё эти Clip, Len, InString явно не убыстряют.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация HEX в Long

Сообщение Игорь Столяров »

Здесь рекурсия предсказуемая ... В принципе, её мона заменить на цикл Len(pHex) по строке. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Конвертация HEX в Long

Сообщение Дед Пахом »

Мне нравится это "В принципе" :-)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7332
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Конвертация 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
Быстрее кусать строку как массив, но мы за безопасный код ! ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить