Про вбудовані можливості перетворення величин в Lua

Перетворимо двійкове в десяткове

в Lua є вбудована можливість перетворити задане текстом двійкове число у десяткове:

Перетворимо шістнадцяткове в десяткове

Таким самим способом можемо перетворити Hex в Dec:
=tonumber('0x1000',16) -- =tonumber('1000',16) рівносильно, оскільки вказана основа 16.

АЛЕ, така можливість є лише в одному напрямку. Тобто не вийде конвертувати десяткове число в двійкове так, щоб повернути його в такому вигляді, ну, наприклад в текстовому, виду “10101”. Так не працює.

Існує ще одна можливість:


команда print(string.format("%02x", 255)) поверне ff
тобто якщо зробити ось так:
Варіант 1: print( tonumber('0x'..string.format("%02x", 255)) )
255

Варіант 2: print( tonumber(string.format("%02x", 255),16) )
255
то як бачимо, ми отримаємо наступні перетворення:

  1. десяткове 255 -> шістнадцяткове ff
  2. додаємо ознаку, що шістнадцяткове число "0x".. (варіант1), або ,16 як параметр tonumber (варіант2).
  3. перевіряємо, що отримане 0xff чи ff,16 сприймається як треба командою print() – працює, бачимо вихідне десяткове 255.

Спробуємо тепер перевести 16-кове число у 10-кове:
Примітка: string.format keys: d - decimal; x - hex; o - octal; s - string; f - floating

Як можна бачити, Lua має купу інструментів з перетворення, що дуже потрібні під час роботи з регістрами сенсорів і подібних речей.
Для тих випадків, коли в Lua немає функцій перетворення, ми розробили власні програмні модулі. Щоб переглянути їх перелік, дивіться розділ Перетворення та обчислення у категорії Системні компоненти, або за прямим посиланням:
conversion-and-computation/