2017-10-27 9 views
1

온라인으로 E91 자료를 계산하는 방법을 알아 보았습니다. 특정 값에 사용되는 문자를 지정하는 http://base91.sourceforge.net/과 같은 자원을 찾았지만 그 값을 얻는 방법을 찾지 못했습니다. 입력 값을 바이너리로 바꾸고 6s와 7s 비트의 청크를 가져 가려고했지만 이러한 방법이 작동하지 않아 잘못된 결과가 발생합니다. 나 자신을 쓰는 것처럼 나를 위해 이렇게 할 코드를 싶지 않아, 난 단지베이스 E91에 문자열을 인코딩하는 데 필요한 프로세스를 알고 싶다.베이스 E91, 어떻게 계산 되나요?

+5

계산 방법을 보려면 소스 코드를 다운로드 했습니까? base64와 같은 기본 변환 인코딩을 잘 이해하면 도움이됩니다. http://www.iiis.org/CDs2010/CD2010SCI/CCCT_2010/PapersPdf/TB100QM.pdf에는 알고리즘에 대한 설명이 있습니다. 쉽게 이해할 수있는 C# 구현은 https://base91csharp.codeplex.com/SourceControl/latest#Base91.cs에서 사용할 수 있습니다. 모든 종류의 물건을 정말 빨리 찾을 수있는 "검색 엔진"이라는 정말 멋진 발명품이 있습니다. 위의 것을 찾는데 3 분이 걸렸을 것 같습니다. 다음 번에 자신 만의 연구를 해보는 것이 좋습니다. –

+0

@ JimMischel : pdf의 알고리즘을 소스 코드와 비교해 보면 소스 코드가 일치하지 않는다는 것을 알 수 있습니다. 소스 코드는 좀 더 정교한 알고리즘을 따릅니다. – geza

답변

0

먼저 입력을 비트 스트림으로 확인해야합니다.

그런 다음 스트림에서 13 비트를 읽고 정수 값을 형성하십시오. 이 정수의 값이 88보다 작거나 같으면 하나의 추가 비트를 읽고 정수의 14 번째 비트 (최하위 비트가 1 번째)에 넣습니다. i0 = v%91, i1 = v/91 : 8192 + 88 = 8280.

그런 다음 두 개의 인덱스로 v 분할 :이 정수의 최대 값이 (의이 v를 부르 자). 그런 다음 91 요소 문자 테이블을 사용하고 두 문자 (table[i0], table[i1])를 출력합니다.

(현재는 88의 이유를 볼 수 있습니다 최대 값 (8280)에 대한 두 i0i1 90이 될)

그래서이 과정은 64 기수보다 더 복잡하지만 더 많은 공간 효율적입니다. 또한, base64와 달리 출력의 크기는 입력 바이트에 조금 의존합니다. 0x00의 N- 길이 시퀀스는 0xff의 N- 길이 시퀀스 (N은 충분히 큰 수)보다 짧을 것이다.

+0

나는 여분의 비트를 13 번째 비트가 아닌 14 번째 비트로 추가한다고 가정합니다. 그렇지 않으면 8280을 얻지 못합니다. 정확히 같은 수의 표현 된 값을 갖게됩니다. 당신이 완전히 내 문제를 해결했다는 것 외에도, 이것은 내가 찾지 못한 퍼즐 조각이었습니다. 고마워. –

+0

@ milo.farrell : 예. 그것은, 어떻게 당신이 가장 낮은 비트를 호출 할 수 있습니다 :) 일반적으로, 내가 가장 낮은 비트 0을 사용합니다. 내 대답에 이것을 분명히했습니다. – geza