byte[] ascii = Encoding.ASCII.GetBytes("문자열");
foreach (byte b in ascii)
{
        Console.WriteLine(string.Format("0x{0:x}", b));    // Ascii 
        Console.WriteLine(((Char)b).ToString());            // Ascii To Char
}



위와 같은 형식으로 이용하면 된다.





C#으로 서버는 콘솔로 만들고,


WPF로 클라이언트로 만들어서 서로 문자열을 주고 받고 있는데,




ABCD라는 문자열을 받아와서,


ABCD라는 또 다른 문자열과 아무리 비교를 해봐도 자꾸만 다르다고 나왔다.




결국 클라이언트에서, 서버에서 받아온 문자열과, 직접 동일하게 타이핑하여 입력한 문자열 두개의 length값을 비교하니


그 값이 1 차이가 있다는 것을 알 수 있었다.




개행문자나 이런쪽 문제인 것으로 추정은 하였으나, 정확한 원인은 몰랐으며 결국 커뮤니티에 질문을 하고서야,


아스키 코드로 찍어봐라는 답변을 받고 찍어봤더니


0x3f
?


라는 것이 문자열 앞에 삽입되서 들어오는 현상이 있다는 것을 확인할 수 있었다..




이유는 여전히 모르겠지만, 아스키코드로 찍어보지 않았다면 해결 못했을지도 모르겠다.

10진법 (Decimal) 숫자를 2진법 (Binary) 로 변환하는 방법은 꽤 많다.


그리고 목적에 따라 더더욱 많아진다.


단순하게 출력만 할 것이라면 재귀등으로 나누면서 구현도 가능하지만,


이럴 경우 해당 값을 직접적으로 이용은 할 수 없다.



#include <bitset> 을 필요로 한다.


string binary = bitset<2진법_표기_갯수>(10진법_숫자).to_string();


이렇게 하면 가장 간단한 형태가 된다.


다만, 여기서 함정이 하나 있다면, 바로 위에서 한글로 표기한 2진법_표기_갯수 라는 공간에 어떠한 숫자를 넣냐에 따라 결과가 달라진다.


2진법으로 계산은 맞긴 한데, 표기가 달라진다.




숫자 10을 2진법으로 표기시


1010 이 된다.


그런데 위 코드를 아래와 같이 이용한다면


string binary = bitset<6>(10).to_string();


001010


string binary = bitset<8>(10).to_string();


00001010


이런식으로 숫자입력에 따라 앞에 0이 몇 개가 더 붙는지가 결정된다.




위와 같이 앞에 0 표기가 필요하다면 이게 가장 간편하지만, 종종 0이 없이 매번 값에 따라 유동적인 표기를 원하는 경우도 있다.

쉽게 말하면 앞에 0으로 시작되는 2진법은 필요가 없는 형태가 그것이다.


그 경우 아직 위와 같이 한 줄로 되는 코드를 찾지는 못했지만,


아래와 같은 함수를 만들어 볼 수 있다.


#include <string>
#include <sstream>


가 필요하다.




string convertToBinary(int number)
{
 string ans;
 while (number > 0)
 {
  stringstream tempstream;
  tempstream << number % 2;
  string temp(tempstream.str());
  ans.append(temp);

  number = number / 2;
 }

 reverse(ans.begin(), ans.end());
 return ans;
}





숫자 배열로 구현한거랑 사실 큰 차이는 없다.


string 으로 출력하기 위해서 위와같은 형태를 했을 뿐이다.






+ Recent posts