진수 변환 (Base Converter)
2진수, 10진수, 16진수 간의 변환은 흔히 2진수 문자열, 10진수 숫자, 16진수 문자열간의 변환을 말하는데, 상호 변환은 모두 10진수 숫자를 기본으로 한다. 즉, 2진수에서 16진수로의 변환을 위해 먼저 2진수문자열을 10진수로 변환한 다음 다시 16진수 문자열로 변환하게 된다.
10진수로의 변환은 Convert.Int32(strVal, base) 함수를 사용하는데, 첫번째 파라미터인 해당 문자열의 값이 두번째 파라미터인 base(진수)로 표현되어 있으니 이를 파싱해서 정수로 변환하라는 명령이다.
10진수로부터 타 진수로의 변환은 Convert.ToString(intVal, base) 함수를 사용하는데, 이는 첫번째 파라미터인 정수로부터 두번째 파라미터인 base 진수로 변환하여 문자열을 리턴하게 된다.
10진수로의 변환은 Convert.Int32(strVal, base) 함수를 사용하는데, 첫번째 파라미터인 해당 문자열의 값이 두번째 파라미터인 base(진수)로 표현되어 있으니 이를 파싱해서 정수로 변환하라는 명령이다.
10진수로부터 타 진수로의 변환은 Convert.ToString(intVal, base) 함수를 사용하는데, 이는 첫번째 파라미터인 정수로부터 두번째 파라미터인 base 진수로 변환하여 문자열을 리턴하게 된다.
예제
// 2진수 문자열을 10진수 숫자로
string strBase2 = "0000011011101010"; // 0x06EA
int iBase10 = Convert.ToInt32(strBase2, 2);
// 10진수 숫자를 16진수 문자열 (영문소문자)
string strHex = Convert.ToString(iBase10, 16);
// 10진수 숫자를 16진수 문자열 (영문대문자)
// (X4: Hexa 4자리, 영문은 대문자로)
string strHex2 = iBase10.ToString("X4");
// 위의 ToString과 동일한 표현
string strHex3 = string.Format("{0:X4}", iBase10);
// 16진수 문자열을 10진수로
int iBase10_2 = Convert.ToInt32(strHex3, 16);
// 10진수를 2진수 문자열로
string strBase2_2 = Convert.ToString(iBase10, 2);
Console.WriteLine(" 2진수: {0}", strBase2); // 0000011011101010
Console.WriteLine("10진수: {0}", iBase10); // 1770
Console.WriteLine("16진수: {0}", strHex); // 6ea
Console.WriteLine("16진수: {0}", strHex2); // 06EA
Console.WriteLine("10진수: {0}", iBase10_2); // 1770
// Hex 문자열을 바이트로
string hexStr = "5A";
byte b1 = Convert.ToByte(hexStr, 16);
Console.WriteLine("{0:X}", b1);
// 또 다른 방법
string s = "9E";
byte b2 = byte.Parse(s, NumberStyles.HexNumber);
string strBase2 = "0000011011101010"; // 0x06EA
int iBase10 = Convert.ToInt32(strBase2, 2);
// 10진수 숫자를 16진수 문자열 (영문소문자)
string strHex = Convert.ToString(iBase10, 16);
// 10진수 숫자를 16진수 문자열 (영문대문자)
// (X4: Hexa 4자리, 영문은 대문자로)
string strHex2 = iBase10.ToString("X4");
// 위의 ToString과 동일한 표현
string strHex3 = string.Format("{0:X4}", iBase10);
// 16진수 문자열을 10진수로
int iBase10_2 = Convert.ToInt32(strHex3, 16);
// 10진수를 2진수 문자열로
string strBase2_2 = Convert.ToString(iBase10, 2);
Console.WriteLine(" 2진수: {0}", strBase2); // 0000011011101010
Console.WriteLine("10진수: {0}", iBase10); // 1770
Console.WriteLine("16진수: {0}", strHex); // 6ea
Console.WriteLine("16진수: {0}", strHex2); // 06EA
Console.WriteLine("10진수: {0}", iBase10_2); // 1770
// Hex 문자열을 바이트로
string hexStr = "5A";
byte b1 = Convert.ToByte(hexStr, 16);
Console.WriteLine("{0:X}", b1);
// 또 다른 방법
string s = "9E";
byte b2 = byte.Parse(s, NumberStyles.HexNumber);