Comparación de un número de 64 bits con signo utilizando operaciones de 32 bits en Lua
Estoy usando Lua en Redis y quiero comparar dos números con signo de 64 bits, que se almacenan en dos cadenas de 8 bytes / caracteres.
¿Cómo puedo compararlos con las bibliotecas disponibles en Redis?http://redis.io/commands/EVAL#available-libraries
Me gustaría saber>/<
y==
cheques. Creo que esto probablemente implica extraer dos números de 32 bits para cada int de 64 bits, y hacer algunos cálculos inteligentes con ellos, pero no estoy seguro.
Tengo un código para hacer esto menos abstracto.a0
, a1
, b0
, b1
son todos los números de 32 bits utilizados para representar los msb y lsb de dos int 64s con signo de 64 bits:
-- ...
local comp_int64s = function (a0, a1, b0, b1)
local cmpres = 0
-- TOOD: Real comparison
return cmpres
end
local l, a0, a1, b0, b1
a0, l = bit.tobit(struct.unpack("I4", ARGV[1]))
a1, l = bit.tobit(struct.unpack("I4", ARGV[1], 5))
b0, l = bit.tobit(struct.unpack("I4", blob))
b1, l = bit.tobit(struct.unpack("I4", blob, 5))
print("Cmp result", comp_int64s(a0, a1, b0, b1))
EDITAR: código agregado