Как преобразовать строку шестнадцатеричных цифр в значение, которое она представляет в Lua - PullRequest
21 голосов
/ 23 августа 2011

Я читаю много строк шестнадцатеричных данных. Они приходят в виде строк, и я анализирую их на предмет кодов_строки, которые говорят мне, что делать с остальными данными. Одна строка задает наиболее значимое слово адреса (MSW), другая - наименее значимое (LSW).

Затем мне нужно объединить их вместе, так что если MSW = "00ff" и LSW = "f10a" адрес будет 00fff10a.

Все прошло нормально, но тогда я должен был проверить, был ли адрес между определенным набором значений:

if address <= "007FFFh" and address >= "000200h" then
    print "I'm in"
end

Как вы все, наверное, знаете, Lua не фанат этого, так как он выдает ошибку, используя <= и >= со строками.

Если есть способ, которым я могу преобразовать строку в шестнадцатеричное, такое, что "FFFF" станет 0xFFFF?

1 Ответ

31 голосов
/ 23 августа 2011

Вы используете tonumber:

local someHexString = "03FFACB"
local someNumber = tonumber(someHexString, 16)

Обратите внимание, что числа не в шестнадцатеричном формате. Также они не в десятичном, восьмеричном или чем-то еще. Они просто цифры. Число 0xFF совпадает с числом 255. «FF» и «255» являются строковыми представлениями одного и того же числа.

...