Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • Changelogs
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    RouterOS
    Как преобразовать значение HEX в символ?

    Как преобразовать значение HEX в символ?

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Как преобразовать значение HEX в символ?, RouterOS
     
    jeroenp
    Guest
    #1
    0
    06.05.2016 06:18:00
    Я пытаюсь заполнить ассоциативный массив сопоставлениями символов с их HEX-кодировкой. Ниже указанный код не работает: он не воспринимает конструкцию ("\0".$hexChar). Итак, как мне преобразовать строку, содержащую символы "", "0" и "1" (где "0" и "1" генерируются динамически), так чтобы она парсилась как "\01"?

    :global convert ({});
    #:set ($convert->"\00") "\\00"
    :set ($convert->"\7F") "\\7F"
    :set ($convert->"\81") "\\81"
    :local hexChars "01234567890ABCDEF"
    :local groupChars "01890ABCDEF"
     :for hexCharsIndex from=0 to=([:len $hexChars] - 1) do={
       :local hexChar [:pick $hexChars $hexCharsIndex]
       :set ($convert->("\0".$hexChar)) ("\\0".$hexChar)
     } –jeroen
     
     
     
    rextended
    Guest
    #2
    0
    07.08.2021 22:48:00
    search tag # rextended hex2chr шестнадцатеричный в символ Ммм… но проще так: [rextended@MATRIX] > :global hex2chr do={:return [[:parse "(\"\\$1\")"]]}
    [rextended@MATRIX] > :put [$hex2chr 64]
    d  
    [rextended@MATRIX] > просто не передавайте строчные или неправильные шестнадцатеричные символы, только заглавные. Вот функция для преобразования строки с HEX значениями в строку символов, она также проверяет строчные/заглавные/неправильные HEX: https://forum.mikrotik.com/viewtopic.php?f=9&t=129693&p=871742#p871742
     
     
     
    Sertik
    Guest
    #3
    0
    26.01.2023 10:04:00
    Ты всё ещё можешь это сделать. Получи любой символ по коду (в $key): :local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
     
     
     
    rextended
    Guest
    #4
    0
    26.01.2023 12:32:00
    Что-то у тебя в скрипте не работает, а эта тема — «Как преобразовать HEX значение в символ?» — как раз про перевод шестнадцатеричных значений в символы. В этом тесте я использую знак равенства «=», который в hex — 0x3D, моя функция работает, а твоя — нет. Скорее всего, твоя строка предназначена для преобразования числа от 0 до 255 в 8-битный символ.

    {
    :global hex2chr do={:return [[:parse "(\"\\$1\")"]]}
    :put [$hex2chr "3D"]

    :local key "3D"
    :local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
    :put $char
    }

    Можно использовать для создания функции:

    :global dec2chr do={
     :local input [:tonum $1]
     :local hexchars "0123456789ABCDEF"
     :local convert [:pick $hexchars (($input >> 4) & 0xF)]
     :set convert ($convert.[:pick $hexchars ($input & 0xF)])
     :return [[:parse "(\$convert)"]]
    }

    :put [$dec2chr 61]
     
     
     
    Sertik
    Guest
    #5
    0
    30.01.2023 08:34:00
    :global fsAlphabitCP1251 do={
    :if ([:typeof $0]="lookup") do={
    :if ([:typeof $1]!="nil") do={:return [[:parse "(\"\\$[:pick "0123456789ABCDEF" (([:tonum $1] >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ([:tonum $1] & 0xF)]\")"]]}
    :local string
    :for key from=0 to=255 do={
       :local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
       :set string ("$string"."$char")
    }
    :return $string
     }
    } :put [$fsAlphabitCP1251 “\2B”] :put [$fsAlphabitCP1251]
     
     
     
    Sertik
    Guest
    #6
    0
    30.01.2023 09:27:00
    Функция написана понятно для анализа и изучения:  
    :global dec2chr do={  
       :local input [:tonum $1]
       :local hexchars "0123456789ABCDEF"  
       :local convert [:pick $hexchars (($input >> 4) & 0xF)]
       :set convert ($convert.[:pick $hexchars ($input & 0xF)])
       :return [[:parse "(\"\\$convert\")"]]
    }

    :put [$dec2chr 61] Такая же функция. Ничего не понятно, но коротко и работает.
    :global dec2chrNew do={  
       :return [[:parse "(\"\\$[:pick "0123456789ABCDEF" (([:tonum $1] >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ([:tonum $1] & 0xF)]\")"]]
    }

    :put [$dec2chrNew 61]
     
     
     
    rextended
    Guest
    #7
    0
    30.01.2023 10:57:00
    Я предпочитаю писать код так, чтобы через несколько месяцев мог понять, что же там написал, и при этом не сойти с ума. И я избегаю переписывать одни и те же строки и повторять одни и те же операции несколько раз ("0123…", [:tonum $1]). Для чего это вообще? Каждый раз возвращается NULL (0x00).
     
     
     
    Sertik
    Guest
    #8
    0
    02.02.2023 10:28:00
    Извиняюсь, что так долго не отвечал. Эта функция используется для получения символа по коду, а если $1 не установлен, то она возвращает строку из всех символов страницы.

    :global fsAlphabitCP1251 do={
    :if ([:typeof $0] = "lookup") do={
    :if ([:typeof $1] != "nothing") do={:return [[:parse "(\"\\$[:pick "0123456789ABCDEF" (([:tonum $1] >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ([:tonum $1] & 0xF)]\")"]]}
    :local string
    :for key from=0 to=255 do={
       :local char [[:parse "(\"\\$[:pick "0123456789ABCDEF" (($key >> 4) & 0xF)]$[:pick "0123456789ABCDEF" ($key & 0xF)]\")"]]
       :set string ("$string"."$char")
    }
    :return $string
     }
    }

    :log error [$fsAlphabitCP1251 43]

    :log warning [$fsAlphabitCP1251]
     
     
     
    rextended
    Guest
    #9
    0
    02.02.2023 10:37:00
    Извините, но нельзя использовать имя в кодировке CP 1251, потому что не происходит никакого преобразования, а для разных пользователей для разных символов используется один и тот же код…
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры