2012-03-04 2 views
4

C#에서 기본 변환을 수행 할 준비가 된 함수가 있습니까? 나는베이스 26과베이스 27을 10 진수로 변환하려고합니다. 나는 종이로 할 수 있지만 경험이 많은 프로그래머는 아니며 가능하면 처음부터 그렇게하지 않을 것입니다. 감사!C#에서 base-27 (또는 base-X)을 base-10으로 변환 하시겠습니까?

+1

"무엇을 시도하셨습니까?" (시도를 참조하는 것이 바람직하다도 완벽하게 작동하지 않는 경우, 그런 다음 세부 사항이 논의 될 수 있고, 노력이 증명되었다.) –

+0

또한, * 기존의 * base64로 인코더/디코더보고 고려; 그것은 수학에서 단지 약간 다른 숫자입니다 ('/'또는'%'대신 64,'/'또는'% 'by 27 등). 그러나 아이디어는 같습니다. –

+0

pst : 나는 무엇인가를 시도하지 않았습니다. 무엇인가 존재한다면 그것을 쓰고 싶지 않기 때문입니다. 나는 어떤 방법 으로든 완성 된 코드를 요구하지 않고, 나는 단지 어떤 방향을 찾고있다. 감사! – miltonjbradley

답변

3

10 (Convert.ToInt32)를 기반으로하는 기본 2, 8, 16에서 숫자를 변환하는 기성품 기능이있다. 기본 26 또는 기본 27을 기본 10으로 변환하려면 직접해야합니다.

이제 기본 26 숫자에 대해 들어 본 적이 없으므로 '숫자'는 A부터 Z까지 (A는 0, Z는 25의 십진수) 가정합니다. 단지 26

주 대표하는 자 등 추가

string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
int GetDigitValue(char digit) 
{ 
    return charset.IndexOf(digit); 
} 
int ConvertFromBase26(string number) 
{ 
    int result = 0; 
    foreach(char digit in number) 
     result = result * charset.Length + GetDigitValue(digit); 

    return result; 
} 

베이스 (27)에서 변환하려면 : 당신이 다음을 수행해야합니다 (10)를 기반으로하는 기본 (26)로 변환하는 오류 정정이 없습니다 (당신은 문자열을 변환 할 수 있습니다 "$ # $ @ # $ @"는 좋은 음수를 얻을 것입니다.) GetDigitValue는 다소 비효율적이므로 이러한 변환을 많이 수행하려는 경우 조회 테이블로 교체해야합니다.

편집 : 단지 차기에 대한 LINQ 버전.

는 다시, 더 효율적인 조회 및 오류 정정, 문자열을 가정에만 법적 숫자로 구성합니다.

string charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
int ConvertFromBase(string charset, string number) 
{ 
    return number.Select(c=>charset.IndexOf(c)).Aggregate(0, (x, y) => x*charset.Length +y); 
} 

첫 번째 버전이 더 읽기 쉽다고 생각합니다. 답 떨어져 구축

+0

이제 LINQ 표현식으로이 작업을 수행 할 수 있습니까? – zmbq

+0

예, 대답을 편집했습니다. – zmbq

+0

기술적으로 'Convert.ToInt32'는 숫자를 2로 변환합니다.이 값을 10 진수로 변환하는 것은'Int32.ToString'입니다. – dan04

0

. 문자 ASCII 값을 사용할 수 있기 때문에 charset 조회 목록이 필요 없습니다.

int ConvertFromBase26(string number) 
{ 
    return number.Select(digit => (int)digit - 64).Aggregate(0, (x, y) => x * 26 + y); 
} 

나는이 엑셀 프로그래밍 동안의 int로 열 문자열 주소를 변환하는 데 사용.

관련 문제