C# DirectInput键代码-十六进制字符串变短
我有一个2D数组,包含所有字母及其DirectInput键代码:C# DirectInput键代码-十六进制字符串变短,c#,string,hex,short,directinput,C#,String,Hex,Short,Directinput,我有一个2D数组,包含所有字母及其DirectInput键代码: string[,] DXKeyCodes = new string[,] { {"a","0x1E"}, {"b","0x30"}, ... }; Send_Key(keycode, 0x0008); 然后我有一个函数,它从数组返回基于字母的十六进制代码,如果我发送“a”,它将返回“0x1E” 然后,该键代码通过一个函数作为击键发送到外部程序,该函数要求将键代码指定为short,但我的数组包含字符串 如
string[,] DXKeyCodes = new string[,]
{
{"a","0x1E"},
{"b","0x30"},
...
};
Send_Key(keycode, 0x0008);
然后我有一个函数,它从数组返回基于字母的十六进制代码,如果我发送“a”,它将返回“0x1E”
然后,该键代码通过一个函数作为击键发送到外部程序,该函数要求将键代码指定为short,但我的数组包含字符串
如何将这种字符串转换为短字符串
例如,这是可行的,但当然,始终发送相同的密钥代码:
Send_Key(0x24, 0x0008);
我需要这样的东西才能工作,这样我就可以发送任何给定的密钥代码:
string[,] DXKeyCodes = new string[,]
{
{"a","0x1E"},
{"b","0x30"},
...
};
Send_Key(keycode, 0x0008);
我尝试了以下方法,但也不起作用,只是让我的应用程序崩溃了
Send_Key(Convert.ToInt16(keycode), 0x0008);
我真的不想去这样的地方
if (keycode == "a")
{
Send_Key(0x1E, 0x0008);
}
else if (keycode == "b")
{
Send_Key(0x30, 0x0008);
}
...
我确信有更好的方法,但我找不到:(
感谢您的帮助。正如itsme86和Jasen在问题注释中提到的那样,您应该使用。这样,您可以通过键值查找值(而不必在需要查找相应值时遍历数组搜索键值),并且不必从字符串进行任何转换。例如
Dictionary<string, short> DXKeyCodes = new Dictionary<string,short>
{
{"a", 0x1E},
{"b", 0x30}
};
short theValue = DXKeyCodes["a"]; // don't need to loop over DXKeyCodes
// don't need to convert from string
(在C#中,
short
是System.Int16
的别名,总是有16位。)根据DirectInput文档,API有一个
因此,您可以这样填充您的数据库:
var DXKeyCodes = new Dictionary<string,short>
{
{ "a", (short)Microsoft.DirectX.DirectInput.Key.A }, // enum value of A is 30 which == 0x1E
{ "b", (short)Microsoft.DirectX.DirectInput.Key.B }
};
一个明显的问题是:为什么一开始就将十六进制值存储为字符串而不是短字符串?另一个问题是:为什么不使用字典?听起来像是一个
字典哦…只是因为我不知道字典是什么,我本可以使用它:)听起来这是一个很愚蠢的问题,很容易解决。。。我现在就试试。。。谢谢伙计谁带了石头?也请不要抱怨被否决!可能有人有很好的理由。例如,在几个地方阅读你的问题是非常容易的……好吧,避免被否决的一个方法就是学习语言。有很多免费资源可以教你如何做这些事情。相反,你在这里提出了非常基本的问题,你的期望是我们有耐心和理解。我们的理解是,你不必费心花时间去阅读,而可以用简单的方式去戳它,如果你想不出来,你可以问陌生人。