Chuyển chuỗi ký tự nhị phân (vd: "1001") thành số nguyên int. Có 2 cách: dùng built-in Convert.ToInt32 hoặc tự triển khai thuật toán.
Cách 1: Built-in (Khuyên dùng)
string binary = "1001";
int value = Convert.ToInt32(binary, 2); // 9
Cách 2: Tự triển khai (giáo dục)
using System;
class Program {
static void Main() {
string str = "1001";
Console.WriteLine("Số nguyên: " + ConvertClass.Convert(str));
}
}
public static class ConvertClass {
public static int Convert(string str1) {
if (string.IsNullOrEmpty(str1))
throw new ArgumentException("Invalid input");
int result = 0;
for (int i = 0; i < str1.Length; i++) {
char c = str1[i];
if (c == '1') {
// Bit tại vị trí i (từ trái) có trọng số 2^(len-1-i)
result += (int)Math.Pow(2, str1.Length - 1 - i);
} else if (c != '0') {
throw new ArgumentException("Invalid binary digit: " + c);
}
}
return result;
}
}
Kết quả
Số nguyên: 9
Giải thích thuật toán
Chuỗi "1001" (length=4):
- i=0, '1': 2^(4-1-0) = 2³ = 8
- i=1, '0': bỏ qua
- i=2, '0': bỏ qua
- i=3, '1': 2^(4-1-3) = 2⁰ = 1
- Tổng = 8 + 1 = 9
Lưu ý
Convert.ToInt32(str, 2)xử lý: chuỗi rỗng (throw), ký tự không hợp lệ (throw), số lớn (overflow → exception).- Tự viết: dùng
result = result * 2 + (c - '0')hiệu quả hơnMath.Pow(tránh float, nhanh hơn). - Cách tối ưu:
foreach (char c in str) {
result = result * 2 + (c - '0'); // c-'0' = 0 hoặc 1
}
- Hỗ trợ
long:Convert.ToInt64(str, 2).