Home Full Site
string을 2진수 문자열로 변환

string 타입의 문자열 을 바이너리 식 문자열으로 변경하려면, 예를 들어 C# 문자열 'AB'를 유니코드 바이트 안에 표현되어 있는 Binary Format인 '01000001000000000100001000000000' 으로 string에 저장하려면,
(1) 먼저 C# string 문자열을 Unicode Encoding으로 된 byte[] 배열로 변경한다. 이는 UnicodeEncoding.Unicode.GetBytes()을 사용하여 얻어 올 수 있다.
(2) 하나의 byte에 저장된 Binary 포맷 데이타를 문자열로 변경하려면, Convert.ToString(byte1, base) 메서드를 사용한다. 여기서 byte1은 입력 byte이며, base에는 2진수를 나타내는 2를 사용한다.
(3) Step2에서 하나의 문제점은 리턴값이 8자리 보다 작을 경우 문자열 앞에 0을 채우지 않는다는 것이다. 예를 들어, 00011001을 리턴하길 기대했을 때, 11001만 리턴하는 것이다. 이를 보정하기 위해 string.PadLeft() 메서드를 사용하여 앞에 0을 채워준다.
아래 예제는 문자열을 2진수 문자열로 변환하여 텍스트 파일에 저장하는 예이다.


예제

string input = "iPad 가격";

byte[] bytes = UnicodeEncoding.Unicode.GetBytes(input);
string binaryString = string.Empty;                        

foreach (byte b in bytes)
{
      // byte를 2진수 문자열로 변경
      string s = Convert.ToString(b, 2);                
      binaryString += s.PadLeft(8, '0');
}
Debug.WriteLine(binaryString);

// 파일로 출력한 경우
File.WriteAllText(@"1.txt", binaryString);



2진수 문자열을 string으로 변환

위와 반대로, 바이트 표현식인 2진수로 된 문자열을 실제 유니코드 문자열로 변환하기 위해서는,
(1) 먼저 2진수 문자열을 8개씩 쪼개서 한 바이트씩 처리해야 한다.
(2) 2진수 문자 8개를 숫자로 변경하기 위해서는 Convert.ToInt32(s, 2) 메서드를 사용한다. 여기서 첫번째 파라미터 s는 8자리 2진수 문자열을 나타내고, 두번째 파라미터 2는 2진수를 의미한다. 즉 문자열을 2진수에 기초하여 숫자로 변환하는 것이다.
(3) 모든 2진수 문자열을 byte[] 배열에 넣었으면, Unicode 인코딩의 GetString() 메서드를 사용하여 실제 유니코드 문자열로 변경한다.


예제

// 파일에서 입력받는 경우
// string binData = File.ReadAllText(@"1.txt");

string binData = "0110100100000000010100000000000001100001000000000110010000000000";

int nbytes = binData.Length / 8;
byte[] outBytes = new byte[nbytes];

for (int i = 0; i < nbytes; i++)
{
   // 8자리 숫자 즉 1바이트 문자열 얻기
   string binStr = binData.Substring(i * 8, 8);
   // 2진수 문자열을 숫자로 변경
   outBytes[i] = (byte)Convert.ToInt32(binStr, 2);
}

// Unicode 인코딩으로 바이트를 문자열로
string result = UnicodeEncoding.Unicode.GetString(outBytes);
Debug.WriteLine(result);




© csharpstudy.com