TokigunStudio obfuscation collection

파이썬 convert_base() 함수

php의 base_convert 함수와 비슷한 사용법을 가지고 있는 파이썬 함수입니다.

코드

다음은 2004년 6월 27일 버전(revision 1)입니다. 0에 대한 출력이 빈 문자열로 나오는 버그가 있습니다.

convert_base=lambda N,A,B:(lambda n,v:''.join(map(lambda x:chr(x+(x>9 and 55 \
or 48)),[(v//n**k)%n for k in xrange(4*len(str(v)))]))[::-1].lstrip('0'))(B, \
reduce(lambda x,y:x*A+ord(y.upper())-(y<'A'and 48 or 55),str(N),0))#tokigun:-)

다음은 2004년 12월 1일 버전(revision 2)입니다. revision 1의 버그를 잡고 기능이 추가되었습니다.

convert_base=lambda N,A,B,P=0:(lambda v,n:''.join(map(lambda x:chr(x+(x>9 and 55
or 48)),[(v//n**k)%n for k in xrange(4*len(str(v)))]))[::-1].lstrip('0'))(reduce
(lambda x,y:x*A+ord(y.upper())-(y<'A'and 48 or 55),str(N),0),B).zfill(P or 1)#:)

사용법

이 코드는 파이썬 코드로 파이썬 인터프리터가 필요합니다. 파이썬 인터프리터에서 위의 코드를 실행해서 함수를 선언한 후, 다음과 같이 바꾸고자 하는 문자열, 현재 진법, 나중 진법을 순서대로 인자로 넣으면 사용할 수 있습니다. 첫 인자는 항상 문자열일 필요는 없고, 진법은 2진법부터 36진법까지 가능합니다.

>>> convert_base(848288322387, 10, 36)
'ATP4YQMR'
>>> convert_base('Atp4yqmR', 36, 10)
'848288322387'

revision 2는 네 번째 선택 인자를 받습니다. 이 숫자는 반환하는 문자열의 최소 길이를 뜻하며, 이 길이보다 작을 경우 필요한 갯수만큼 문자열 앞에 0을 첨가합니다.

>>> convert_base(32767, 10, 16, 8)
'00007FFF'
>>> convert_base(32767, 10, 16, 2)
'7FFF'

지금은 글을 남길 수 없고 이미 남겨진 걸 볼 수만 있습니다.

Copyright © 2004-2005, Kang Seonghoon (Tokigun). All Rights Reserved.
Permanent Link: http://page.tokigun.net/obfuscation/_/convertbase.php
Last updated on December 10, 2004. Valid XHTML 1.1 Valid CSS 2