我想确定是否有可能将箭头键转换为宽字符。我为它的getch()函数使用了conio.h,我只是喜欢它与类似函数相比的工作原理,并且必须调用两次才能检索箭头键。箭头键为宽字符
箭头键按下时返回取0xE0(-32)作为第一个字符,然后{左= 'K',UP = 'H',右= 'M',唐氏= 'P'}
所以我一直在试图找到一种方法将两个字符合并为一个。这是我想出的最接近的东西。功能键虽然不起作用,但无论按下功能键,它总是返回相同的值。 {F1-12 = 0,箭头= 224}我拉出了可信窗口计算器,并能够确定224等于-32二进制。我只是把它放到一个字节,并使用十进制系统,去了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/