C#에서 이진(binary) 문자열을 정수(int)로 변환하려면 Convert.ToInt32 클래스를 활용할 수 있습니다.
예를 들어 다음과 같은 이진 문자열이 있다고 가정해 보겠습니다.
string str = "1001";
이제 문자열의 각 문자를 하나씩 파싱(parsing)하여 처리합니다.
try {
// 전달받은 문자열의 각 문자를 파싱
val = Int32.Parse(str1[i].ToString());
if (val == 1)
result += (int)Math.Pow(2, str1.Length - 1 - i);
else if (val > 1)
throw new Exception("Invalid!");
} catch {
throw new Exception("Invalid!");
}위 로직은 for 루프를 사용하여 입력 문자열(예: "1001")의 모든 문자에 대해 반복적으로 검사를 수행합니다. 이때 문자열의 길이는 Length 속성을 통해 구할 수 있습니다.
str1.Length
전체 예제 코드
아래의 전체 코드를 실행하면 C#에서 이진 문자열을 정수로 변환하는 과정을 직접 확인할 수 있습니다.
using System;
class Program {
static void Main() {
string str = "1001";
Console.WriteLine("Integer:" + ConvertClass.Convert(str));
}
}
public static class ConvertClass {
public static int Convert(string str1) {
if (str1 == "")
throw new Exception("Invalid input");
int val = 0, res = 0;
for (int i = 0; i < str1.Length; i++) {
try {
val = Int32.Parse(str1[i].ToString());
if (val == 1)
res += (int)Math.Pow(2, str1.Length - 1 - i);
else if (val > 1)
throw new Exception("Invalid!");
} catch {
throw new Exception("Invalid!");
}
}
return res;
}
}
실행 결과
Integer:9
동작 원리
이 코드의 핵심 원리는 이진수의 자릿값 개념입니다. 이진수에서 각 자릿값은 2의 거듭제곱을 나타내므로, 예를 들어 "1001"은 2³ + 2⁰ = 8 + 1 = 9가 됩니다. 코드는 문자열을 왼쪽부터 순회하면서 값이 1인 자릿수에 해당하는 2의 거듭제곱 값을 결과에 더하고, 0 또는 1 이외의 문자가 발견되면 예외를 발생시켜 잘못된 입력을 처리합니다.
참고: 내장 메서드로 간단하게 변환하기
.NET에서 기본 제공하는 Convert.ToInt32 메서드를 사용하면 훨씬 간결하게 처리할 수도 있습니다. 두 번째 인자로 진법(base)을 지정하면 됩니다.
string str = "1001";
int result = Convert.ToInt32(str, 2); // 결과: 9
다만 이 방식은 유효하지 않은 문자가 포함된 경우 FormatException이 발생하므로, 상황에 따라 try-catch 블록으로 감싸 예외 처리를 해주는 것이 안전합니다.