c++ 에서 한 한글 xor 와 c# 에서 한 한글 xor 의 값이 다르게 나옵니다.
글쓴이: yys3110 / 작성시간: 금, 2017/07/07 - 7:51오후
C++
////////////////////////////////////////
string C_change(string o, string key) { const char* q = o.c_str(); const char* w = key.c_str(); char* e = new char[o.length()]; int key_n = 0; for (int i = 0; i <strlen(q); i++) { if (q[i] == w[key_n]) { e[i] = q[i]; } else { e[i] = q[i] ^ w[key_n++]; if (key_n >= strlen(w))key_n = 0; } } e[o.length()] = '\0'; string a = e; return a; }
C#
/////////////////////////////////////////
string key(string value,string codeKey) { int k = 0; int len = codeKey.Length; char[] c1 = value.ToCharArray(); char[] c2 = codeKey.ToCharArray(); char[] c3 = new char[value.Length]; for (int i = 0; i < value.Length; i++) { if (c1[i] == c2[k]) { c3[i] = c1[i]; } else { c3[i] = (char)((uint)c1[i] ^ (uint)c2[k++]); if (k >= len) k = 0; } } //buff = new string(c3); return new string(c3); }
코드 입니다.
내용 : 안녕하세요
코드키 : 1234567890
c++ : 륓堵?꼩
c# : 앹녧핫섌욡
이렇게 틀리게 나옵니다.
영어나 숫자는 잘 나오는데 왜 한글만 이렇게 나오나요? ㅠㅠ
C#은 유니티 C# 입니다.
Forums:
잘 알아두세요.
잘 알아두세요.
문자열을 다루는 프로그램을 짰는데 영어, 숫자 등은 잘 돌아가는데 한글이 이상하게 동작한다면
열 중 아홉은 인코딩 문제입니다.
기초적인 숫자나 영문자에 대응되는 코드는 ascii의 매핑이 거의 만국공통이 되었지만
한글 문자를 비롯한 비영어권 문자들은 그렇지 않거든요.
조금 알아보니 C#은 utf-16을 디폴트로 쓰는 모양이군요.
C++는 그냥 char라고만 하면 사실 정해진 인코딩이 없습니다.
리눅스 gcc에서는 utf-8, MS Windows의 Visual C++에서는 cp949, 뭐 그런 식이던데요.
해결책이 대충 두 가지 있는데...
1. ascii 범위 안에서만 놀게 만들면 됩니다.
영어권 프로그래머들이 때때로 이런 선택을 해서 비영어권 사용자들을 울리곤 하죠. 근데 뭐 솔직히 편하긴 합니다.
저도 혼자 만들어서 혼자 쓸 프로그램은 솔직히 유니코드 지원 귀찮아서 생략하곤 해요.
2. 인코딩을 열심히 공부하신 뒤 어느 한 인코딩으로 통일합니다.
보통 utf-8로 통일하는 게 보편적이기는 합니다만 상황에 따라 다르지요.
제 생각엔 MS Windows 환경에서 C#과 VC++를 연동한다면 utf-16으로 통일하는 것도 나쁘지 않다고 봐요.
VC++에서는 wchar_t, wstring이 utf-16 문자/문자열을 지원합니다. 아래 문서를 참조하세요.
http://en.cppreference.com/w/cpp/string/wide
댓글 달기