Перетворимо двійкове в десяткове
в Lua є вбудована можливість перетворити задане текстом двійкове число у десяткове:
1 2 |
=tonumber('111',2) 7 |
1 2 |
=tonumber('1000',2) 8 |
Перетворимо шістнадцяткове в десяткове
Таким самим способом можемо перетворити Hex в Dec:=tonumber('0x1000',16) -- =tonumber('1000',16)
рівносильно, оскільки вказана основа 16.
1 |
4096 |
АЛЕ, така можливість є лише в одному напрямку. Тобто не вийде конвертувати десяткове число в двійкове так, щоб повернути його в такому вигляді, ну, наприклад в текстовому, виду “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
то як бачимо, ми отримаємо наступні перетворення:
- десяткове 255 -> шістнадцяткове ff
- додаємо ознаку, що шістнадцяткове число
"0x"
.. (варіант1), або ,16 як параметрtonumber (варіант2)
. - перевіряємо, що отримане
0xff
чи ff,16 сприймається як треба командоюprint()
– працює, бачимо вихідне десяткове 255.
Спробуємо тепер перевести 16-кове число у 10-кове:
Примітка: string.format keys: d - decimal; x - hex; o - octal; s - string; f - floating
1 2 3 4 5 6 7 |
-- 10 -> 16: =string.format("%02x", 111) 6f -- 16 -> 10: > =tonumber('6f',16) 111 |
Як можна бачити, Lua має купу інструментів з перетворення, що дуже потрібні під час роботи з регістрами сенсорів і подібних речей.
Для тих випадків, коли в Lua немає функцій перетворення, ми розробили власні програмні модулі. Щоб переглянути їх перелік, дивіться розділ Перетворення та обчислення у категорії Системні компоненти, або за прямим посиланням:
conversion-and-computation/