본문

[C++] 10진수와 2진수 서로 변환하기

남의 과제 대신 해주다가 필요해서 작성했습니다. 과제 요구사항에 맞게 char[32]를 기준으로 작성했으며, 필요하다면 동적배열을 사용하여 표현할 수 있습니다. 우선 dec2bin()은 reastArray()로 배열의 모든값을 'X'로 채워준 후 앞에서부터 차례대로 이진수 값을 채워넣습니다. 배열의 마지막에 공백이 붙기 때문에 마지막을 'X'로 채워넣는 부분을 넣었습니다(가시성을 위해)

그리고 bin2dec()은 인터넷에서 돌아다니다가 찾은건데(게시판에서 본건데 게시자도 출처가 어딘지 모른다고..) 원본소스와는 달리 char[32]에 맞도록 수정하였습니다. 배열에서 더이상 숫자(0/1)가 발견되지 않을경우 멈추고 바로 결과를 리턴합니다.

아래 소스를 조금만 변경한다면(예를들어 itoa의 진수입력부와 bin2dec의 곱셈부) 다양한 진법에 대해서 사용이 가능합니다.


void
dec2bin(char digitBuffer[32]){
    resetArray(digitBuffer);
    int input;
    cout << "please type a number to send " << endl;
    cin >> input;
    itoa (input, digitBuffer, 2);
    digitBuffer[strlen(digitBuffer)]='X';
}

int bin2dec(char bin[32]){
  int result=0;
  for(int i=0;i<32;i++)
  {
    if((bin[i]!='0')&&(bin[i]!='1')) break;
    result=result*2+(bin[i]-'0');
    if(result<=0) return -1;
  }
  return result;
}

void
resetArray(char arr[32]){
    for(int i=0; i<32; i++){
        arr[i]='X';
    }
}

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.