Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

실용모듈개발

간단하지만 실용적인 기능을 구현한 모듈 저작물을 공유하는 공간입니다.

2진수,8진수 -> 10 진수 변환기

작성자 : 박종명
최초 작성일 : 2008-07-09 (수요일)
최종 수정일 : 2008-07-09 (수요일)
조회 수 : 5689

앞에서 '16진수 -> 10진수 변환기' 를 만들어 보았습니다.

이번에는 2진수 -> 10진수 , 8진수 -> 10 진수 변환기를 만들어 볼텐데요...

이미 많은 분들이 이전의 코드를 보고 예상하셨겠지만,
'16진수 -> 10 진수 변환' 에서의 16 (마이너스) 승수만 각 진수에 맞도록 변경해 주면 해결이 됩니다.

즉 16이라는 수를 각 진수(2 혹은 8) 로 변경하면 된다는 말입니다.
아래 코드는 이전의 코드에서 16이라는 부분을 2로 변경한 코드입니다(노란색 강조 부분)
즉 2진수 -> 16진수 변환기 이지요...

 

동일한 원리로 8진수 -> 10 진수도 두 군데만 '8'로 변경해 주면 됩니다.


static string sequenceOfChars = "0123456789ABCDEF";

 

static double Convert16To10(string str)

{

      double resultValue = 0;

      int length = 0;

 

      //소수점을 기준으로 소수점 이상,이하 자리 분리

      string[] strArray = str.Split('.');

 

      #region 소수점 이상 값에 대한 10진수 계산

      length = strArray[0].Length;

 

      for (int i = 0; i < length; i++)

      {

          //문자열에서 해당 위치 문자 추출

          char c = strArray[0][i];

 

          //x진수값의 10진수 대응값 (ex: A = 10)

          int indexOfChar = sequenceOfChars.IndexOf(c);

 

          //x의 몇 승? 구하기

          int e = length - (i + 1);

 

          //x진수값의 10진수 대응값 * 16(X) 값 구하기(ex: 10 * x 4)

          for(int j = 0 ; j < e ; j++)

          {

              indexOfChar *= 2; //2진수일 경우...

          }

 

          //각 자릿수 합

          resultValue += indexOfChar;

      }

      #endregion

 

      #region 소수점 이하 값에 대한 10진수 계산

       //소수점이하 자리가 있을 경우에만 계산

      if (strArray.Length > 1)

      {

          length = strArray[1].Length;

          for (int i = 0; i < length; i++)

          {

              //문자열에서 해당 위치 문자 추출

              char c = strArray[1][i];

 

              //x진수값의 10진수 대응값 (ex: A = 10)

              double indexOfChar = sequenceOfChars.IndexOf(c);

 

              //x의 마이너스 몇 승? 구하기

              int e = i + 1;

 

              //2진수값의 10진수 대응값 * 16(마이너스 X) 값 구하기(ex: 1 * 1/x 2)

              for (int j = 0; j < e; j++)

              {

                  indexOfChar *= (double)1 / 2; //2진수일 경우...

              }

 

              //각 자릿수 합

              resultValue += indexOfChar;

          }

      }

      #endregion


       return resultValue;

}

 


 

이름
비밀번호
홈페이지
DT <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요