我想確定是否有可能將箭頭鍵轉換爲寬字符。我爲它的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/