그래서 6 문자의 64 진수를 디코딩하는 프로그램을 작성하려고합니다. 64 개 개의 숫자 순이고문자열에서 숫자로 변환
복귀 6 문자열의 역순베이스 64 번호로 표시되는 36- 비트 수 : 여기서
문제 문이다ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz- +
즉
디코드 ('000000') 0
012,351,641 → 68719476735
→
디코드 ('gR1iC9')
디코드 ('++++++') → 나는 문자열없이이 일을하고 싶습니다.
다음 함수의 역을 생성하는 것이 작업을 수행하는 가장 쉬운 방법 : this 페이지에서 실제로 오후 2Ring로부터
def get_digit(d):
''' Convert a base 64 digit to the desired character '''
if 0 <= d <= 9:
# 0 - 9
c = 48 + d
elif 10 <= d <= 35:
# A - Z
c = 55 + d
elif 36 <= d <= 61:
# a - z
c = 61 + d
elif d == 62:
# -
c = 45
elif d == 63:
# +
c = 43
else:
# We should never get here
raise ValueError('Invalid digit for base 64: ' + str(d))
return chr(c)
# Test `digit`
print(''.join([get_digit(d) for d in range(64)]))
def encode(n):
''' Convert integer n to base 64 '''
out = []
while n:
n, r = n // 64, n % 64
out.append(get_digit(r))
while len(out) < 6:
out.append('0')
return ''.join(out)
# Test `encode`
for i in (0,, 68719476735):
print(i, encode(i))
출력
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-+
0 000000
gR1iC9
68719476735 ++++++
.
이 프로그램의 역관계는 어떻게 작성합니까?
스타트는 :
get_digits의 역수는 상기 아래와 같다 :
는def inv_get_digit(c):
if 0 <= c <= 9:
d = ord(c) - 48
elif 'A' <= c <= 'Z':
d = ord(c) - 55
elif 'a' <= c <= 'z'
d = ord(c) - 61
elif c == '+':
d = 63
elif c == '-':
d = 62
else:
raise ValueError('Invalid Input' + str(c))
return d
def decode(n):
out = []
while n:
n, r= n % 10, n ** (6-len(str))
out.append(get_digit(r))
while len(out) < 10:
out.append('0')
return ''.join(out)
몇 가지 코드를 직접 작성 해보세요. 내가 여기에서 말했듯이 (https://stackoverflow.com/questions/46739875/converting-a-number-to-base-64-in-python/46740374#comment80448645_46740374), 첫 번째 단계는'get_digit'를 반전하는 것입니다. 어떻게하는지 알려 줬어. –
내 의견을 반영하기 위해 내 게시물을 편집했습니다. 주석에 새로운 코드를 게시하지 않았기 때문에 형식이 비뚤어졌습니다. 그게 더 낫지 않다면? –
아니요, 들여 쓰기가 손실되기 때문에 주석에 여러 줄의 파이썬 코드를 게시하지 마십시오.하지만 어쨌든, 당신의 코드는 질문 자체의 본체에 속해 있습니다. 주석은 단지 당신이 당신의 질문을 명확히하고 개선하는데 도움이 될 것입니다. –