2013-09-05 1 views
2

필자가 작성한 알고리즘의 일부로 10 비트 단어를 고유 한 8 비트 단어로 변환하는 방법을 찾아야합니다. 10 비트 워드는 5 쌍으로 구성되며 각 쌍은 0, 1 또는 2 (절대 3)가 될 수 있습니다. 예 :10 비트 값을 고유 바이트로 통합

|00|10|00|01|10| 

이 값은 어떻게 든 고유 한 단일 바이트로 통합되어야합니다.

각 쌍이 결코 3과 같을 수는 없으므로이 10 비트 단어가 절대 나타내지 않는 값의 범위가 넓어서이 변환을 수행하는 알고리즘을 만들 수 있다고 생각합니다. 이를 수행하는 가장 간단한 방법은 조회 테이블을 사용하는 것이지만 내 프로그램에서 한 번만 사용되는 680 개의 값을 저장하는 데 리소스가 낭비되는 것처럼 보입니다. 나는 이미 쌍 중 하나를 다른 사람들과 어떻게 든 통합하려고 시도했지만, 내가 만든 모든 시도는 고유하지 않은 가치를 가져 왔고, 이제는 아이디어가 매우 빨리 없어지고 있습니다!

어떤 도움이 필요합니까?

+0

네, 물론입니다. 나는 이것을 마이크로 컨트롤러에 프로그래밍하고 있으므로 저장할 수있는 모든 공간이 필요합니다 !! –

+0

허프만 코딩을 시도하십시오 - http://en.wikipedia.org/wiki/Huffman_coding –

답변

5

당신이 가진 수는 본질적으로 그렇게 3^5 = 243 번호, 당신은 단지 5 쌍있다베이스 2.

이 변환해야 3. 기지입니다. 그리고 8 비트는 2^8 = 256 숫자이므로 가능합니다.

기본 사이를 변환하는 가장 간단한 방법은 먼저 밑으로 이동하는 것입니다.

따라서, 귀하의 예를 들면 다음과 같습니다

00|10|00|01|10 

Base 3: 02012 

Base 10: 2*3^3 + 1*3^1 + 2*3^0 
     = 54 + 3 + 2 
     = 59 

Base 2: 
    59 % 2 = 1 
/2 29 % 2 = 1 
/2 14 % 2 = 0 
/2 7 % 2 = 1 
/2 3 % 2 = 1 
/2 1 % 2 = 1 

    So 111011 is your number in binary 

This 좀 더 구체적으로 위의 과정을 설명합니다.

위의 경우 59을 1 바이트 정수로 저장하면 이미 원하는 것을 가질 수 있으므로 명시 적으로 기본 2로 변환 할 필요가 없을 수 있습니다.

+1

당신의 빠른 손가락을 지저분하게 :) – bendataclear

1

기본적으로 기본 3 숫자이며이 숫자를 0 - 255의 단일 숫자로 변환하고 싶습니다. 다행히도 3 진수 (5 진수)는 243 개의 조합을 제공합니다. 당신이해야 할 것들

은 다음과 같습니다

Digit  Action 
( 1st  x 3^4) 
+ (2nd  x 3^3) 
+ (3rd  x 3^2) 
+ (4th  x 3) 
+ (5th) 

이 당신은 바이트의 일부 정보를 저장하기 위해 고려하고있는 242

0

에 번호 당신에게 공을 줄 것이다. 바이트는 많아야 2^8 = 256 상태를 포함 할 수 있습니다.

상태는 완전히 3^5 = 243 <25입니다. 전송이 가능합니다.

네 쌍 ABCDE을 고려해야 (각 캐릭터가 1, 0 일 수 있거나 2)

그냥 A *를 산출 할 수있다 (3)^4 + B * 3^3 + C * 3^2 + D * 3 + E 결과로. 결과가 0 - 255 범위에 있음을 보장합니다.

관련 문제