2014-05-13 2 views
4

아래는 정수 값을 ASCII 문자열로 인코딩하는 코드입니다. 그것은 파이썬으로 작성되었으며 제 테스트에서 잘 작동합니다.정수 값을 문자열로 변환

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) 

그러나 Lua에서 동일한 구현을 시도하면 인코딩되고 디코딩 된 값이 일치하지 않습니다. 다음은 내 루아 버전입니다 :

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)) 

255를 modifier로 사용하여 255를 구분 기호로 사용할 수 있습니다.

+0

단어 구분 : – hjpotter92

답변

5
  1. 사용 local 당신이 (당신의 코드에서 예. codevalue에 대한) 비슷한 이름을 가진 변수를 만들 때마다.
  2. value = value/254을 사용할 때 전체 숫자가 아닌 부분의 정수 부분 만 가져 가야합니다. 따라서

:

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 
+0

덕분이다. 나는 루아 뉴브입니다. 파이썬은 정수를 리턴했을 것이다. 15 명이 있으면 당신에게 줄 것입니다. 내가 잃어버린 나의 구좌 : S – Dick

+0

@Dick, 대부분의 루아 구현은 정수형 연산도 정수 연산도 없다. 그렇지 않다면,'number' 타입이 IEEE-754 double로 구현되어 있다고 가정 할 수 있습니다. –

관련 문제