Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DirectInput键代码-十六进制字符串变短_C#_String_Hex_Short_Directinput - Fatal编程技术网

C# 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,但我的数组包含字符串 如

我有一个2D数组,包含所有字母及其DirectInput键代码:

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 }
};

一个明显的问题是:为什么一开始就将十六进制值存储为字符串而不是短字符串?另一个问题是:为什么不使用字典?听起来像是一个
字典
哦…只是因为我不知道字典是什么,我本可以使用它:)听起来这是一个很愚蠢的问题,很容易解决。。。我现在就试试。。。谢谢伙计谁带了石头?也请不要抱怨被否决!可能有人有很好的理由。例如,在几个地方阅读你的问题是非常容易的……好吧,避免被否决的一个方法就是学习语言。有很多免费资源可以教你如何做这些事情。相反,你在这里提出了非常基本的问题,你的期望是我们有耐心和理解。我们的理解是,你不必费心花时间去阅读,而可以用简单的方式去戳它,如果你想不出来,你可以问陌生人。