본문으로 바로가기

[QT] 진수 변환

category 초짜 프로그래밍/QT 2018. 3. 16. 13:12

QT의 QString 입력값을 받아 진수 변환을 한 뒤 QString 값으로 출력하고자 한다.


이런 저런 코딩을 하다 보면, 10진수/16진수/2진수 등 진수 변환을 하거나 확인해야 할 경우가 발생한다.

물론 인터넷이 접속된 상태라면 구글링을 통해 진수 변환을 수행하면 되기도 하고, 나와 다르게 코딩 실력자라면 이런 것 쯤은 눈 감고도 하겠지만 ... 본인과 같이 프로그래밍 초짜라면 이런 진수 변환이 난감하다.


다음은 C++/Qt 기반으로 작성되었고, 간단한 진수 변환기를 만들면서 기록하는 내용이다.


들어가기에 앞서 다음의 내용들은 초보적인 입장으로 구글링을 통해 습득(?)한 단순 결과들로 이것이 최선이라고 장담 못함을 미리 언급해 둔다.

QString으로 입력받아 진수를 변환 한다.

물론 INT 등의 형식으로 입력 받아 처리해도 되겠지만, Qt를 사용하다 보면 QString을 많이 접하게 된다.

대부분의 경우 QString 형식으로 입력 받고, QString 형식으로 출력하게 된다.

10진수 -> 16진수 변환

다음의 함수 및 코드는 이러한 QString 값을 입력 받아 QString으로 결과를 리턴하는 10진수 -> 16진수 변환 코드 이다.

핵심은 QString::arg(...)를 사용 했다. 이 아규먼트의 자세한 내용은 이 곳 QString::arg(...)을 참조 한다.

QString QString::arg(uint a, int fieldWidth = 0, int base = 10, QChar fillChar = ((QLatin1Char)(' '))) const
QString ConvertDecHexBin::ConvDecToHex(QString strDec)
{
	//// QString 10진수 -> 16진수

	QString _retval = "";
	bool ok;

	QString temp = QString("%1").arg(strDec.toUInt(&ok), m_digitNumb, 16, QLatin1Char('0')).toUpper();

	if (ok)
	{
		_retval = temp;
	}

	return _retval;
}
8번째 라인의 참고 사항
  • .arg(...)의 결과를 %1에 반환한다.
  • strDec.toUInt(&ok)는 QString 값을 uint 형식으로 변환해 주고 있고, 변환 결과에 따라 bool ok 변수에 true/false를 반환 한다.
  • m_digitNumb는 표현하는 최대 자리수를 지정하는 int 형 변수이다. (default = 0)
    최대 표현 자리수를 외부에서 컨트롤 하기 위해 멤버 변수로 지정했을 뿐이다.
  • int base = 16 .. 즉, 16진수로 표현하라~~ 결국 이것이 핵심
  • QLatin1Char('0')은 최대 자리수를 표현함에 있어 빈 공간을 무엇으로 채울 것인가..
  • 마지막으로 .toUpper()는 진수를 표현함에 있어 영문자를 대문자로 표현하게 된다. (예: 002A) 이것이 없으면 (002a)와 같이 소문자로 표시

10진수 -> 2진수 변환

다음의 함수 및 코드는 QString 값을 입력 받아 QString으로 결과를 리턴하는 10진수 -> 2진수 변환 코드 이다. 위의 16진수 변환과 거의(!) 동일하고, 8라인의 int base 변수만 2로 바꿨을 뿐...

QString ConvertDecHexBin::ConvDecToBin(QString strDec)
{
	//// QString 10진수 -> 2진수

	QString _retval = "";
	bool ok;

	QString temp = QString("%1").arg(strDec.toUInt(&ok), m_digitNumb, 2, QLatin1Char('0'));

	if (ok)
	{
		_retval = temp;
	}

	return _retval;
}

2진수 -> 10진수 변환

다음의 함수 및 코드는 QString 값을 입력 받아 QString으로 결과를 리턴하는 2진수 -> 10진수 변환 코드 이다.

10진수로의 변환 핵심은 QString::toUInt(...)를 사용한 것이고, 자세한 내용은 이 곳 QString::toUInt(...)를 참조 한다.

uint QString::toUInt(bool *ok = Q_NULLPTR, int base = 10) const
QString ConvertDecHexBin::ConvBinToDec(QString strBin)
{
	//// QString 2진수 -> 10진수

	QString _retval = "";
	bool ok;

	uint _dec = strBin.toUInt(&ok, 2);
	if (ok)
	{
		_retval = QString::number(_dec);
	}

	return _retval;
}

16진수 -> 10진수 변환

다음의 함수 및 코드는 QString 값을 입력 받아 QString으로 결과를 리턴하는 16진수 -> 10진수 변환 코드 이다.

QString ConvertDecHexBin::ConvHexToDec(QString strHex)
{
	//// QString 16진수 -> 10진수

	QString _retval = "";
	bool ok;


	uint _dec = strHex.toUInt(&ok, 16);
	if (ok)
	{
		_retval = QString::number(_dec);
	}

	return _retval;
}


C++/QT로 만든 진수 변환기

다음은 어설프게 만들어 본 10진수/16진수/2진수 간 변환기이다.



진수변환기 헤더

진수변환기 CPP


'초짜 프로그래밍 > QT' 카테고리의 다른 글

[QT] QProcess 외부 파일 실행  (0) 2018.03.07