화살표 키를 사용하여 와이드 문자로 변환 할 수 있는지 판단하려고합니다. conio.h를 getch() 함수로 사용하고 있는데, 비슷한 함수와 비교하여 작동하는 방식이 마음에 들었으며 두 번 호출하여 화살표 키를 검색해야합니다.와이드 문자로 된 화살표 키
화살표 키 때 첫 번째 문자로 누르면 반환 0xE0 (-32), 다음 {왼쪽 = 'K', 업 = 'H', 오른쪽 = 'M', 아래 = 'P'}
그래서 나는 두 문자를 하나로 병합하는 방법을 찾으려고 노력해 왔습니다. 이것은 내가 생각해 낸 가장 가까운 것입니다. 기능 키는 작동하지 않지만 항상 눌러 진 기능 키와 상관없이 동일한 값을 반환합니다. {F1-12 = 0, Arrows = 224} 저는 신뢰할 수있는 창 계산기를 꺼 냈고 224가 이진수로 -32와 동일하다는 것을 알 수있었습니다. 난 그냥 바이트 내려 놓고 10 진수 시스템을 사용하고 100 + 124 가서 = - 32했다.
누군가가 왜 변환이 배열의 첫 번째 문자만을 고려하고 있는지 파악할 수 있습니다. 나는 틀린 일을 분명히했다. 충분한 이야기, 죄송합니다. 너무 길어서 그런 경우라면 지금 여기에 코드가 있습니다.
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <wincon.h>
#include <conio.h>
#include <cwchar>
/**int main()
{
int N;
char C;
wchar_t R;
while(true)
{
while(!kbhit()){}
//C = getch();
//if((R == 0) || (R == 224))
std::cout << R << std::endl;
N = R;
std::cout << R << " = " << N << std::endl;
}
}*/
int main()
{
int N = 0;
char C[2];
wchar_t R;
mbstate_t mbst;
while(true)
{
mbrlen(NULL,0,&mbst);
memset(&mbst,0,sizeof(mbst));
for(int i = 0; i < 2; ++i)
{
while(!kbhit()){}
C[i] = getch();
N = C[i];
switch(N)
{
case 0:
break;
case -32:
break;
default:
//input needs to be converted
mbrtowc(&R,C,2,&mbst);
N = R;
std::cout << R << " = " << N << std::endl;
i = 3;
break;
}
}
}
}
편집 :
나는 노동 조합을 사용하여 2 바이트를 결합 할 수있는 방법을 발견했다. 나는 이것을 게시했을 때 노동 조합이 무엇인지 몰랐다. 공용체를 사용하면 두 개의 서로 다른 데이터 유형에 동일한 메모리 공간을 사용할 수 있습니다. 작동 방식은 다음과 같습니다. - http://www.cplusplus.com/doc/tutorial/other_data_types/