Domanda

Below is code to encode an integer value into an ASCII string. It is written in Python, and works fine from my testings.

def encode(value):
    code = ''
    while value%254 != value:
       code = code + chr(value%254)
       value = value/254
    code = code + chr(value)
    return code

def decode(code):
    value = 0
    length = len(code)
    for i in range(0,  length):
        print code[i]
        value = value * 254 + ord(code[length-1-i])
    return value


code = encode(123456567)
print code

print decode(code)

However when I try the same implementation in Lua, the values encoded and decoded do not match up. Here is my Lua version:

function encode(value)
    code = ''
    while value%254 ~= value do

        code = code .. string.char(value%254)
        value = value/254
    end
    code = code .. string.char(value)
    return code
end

function decode(code)
    value = 0
    code = string.reverse(code)
    for i=1, #code do
        local c = code:sub(i,i)
            print(c)
            value = value*254 + string.byte(c) 
    end
    return value
end

code = encode(2555456)

print(decode(code))

Please note that I am trying to using mod 254 so that I can used 255 as a delimiter.

È stato utile?

Soluzione

  1. Use local whenever you are creating variables with similar names (for eg. code and value in your code).
  2. When you use value = value / 254, you need to take only the integer part of the division and not the entire number.

Therefore:

function encode(value)
    local code = ''
    while value % 254 ~= value do
        code = code .. string.char( value % 254 )
        value = math.floor( value / 254 )
    end
    code = code .. string.char( value )
    return code
end

function decode(code)
    local value = 0
    code = code:reverse()
    for i = 1, #code do
        local c = code:sub( i, i )
        value = value * 254 + c:byte()
    end
    return value
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top