Это работает с Lua 5.2, если вы устанавливаете bigint :
local bigint = require "bigint"
function toLong(s)
ret = bigint:new(0)
for i=1,string.len(s),1 do
-- (leftshift(8) is just like times-256, but faster)
ret = ret:leftshift(8) + bigint:new(string.byte(s, i))
end
return ret
end
До версии lua 5.2 синтаксис в стиле "\ xAB" не поддерживался, но вы могли делать десятичные дроби, например "\ 65", для заглавной буквы ASCII A.
Кстати, вы можете сделать это без bigint, как:
function numLong(s)
ret = 0
for i=1,string.len(s),1 do
ret = (ret * 256) + string.byte(s,i)
end
return ret
end
Большая разница в том, что bigint будет представлять произвольно большие числа, а нормальное числовое значение по умолчанию является плавающим в Lua и имеет ограничение точности на число фактически используемых бит (хотя на моем компьютере эти два представления приходят то же самое, когда я проверял ваш конкретный случай).
Тем не менее: если вам нужно представление произвольно большого числа, используйте bigint или сходите с ума.
Да, кстати: вы же понимаете, что вы используете порядок байтов (или "порядок сетевых байтов") для вычисления своих чисел, верно? Будьте осторожны, переключаясь между символьными строками и uint64 (особенно, если ваша целевая машина имеет младший порядок, как у Intel) ...