我是一名正在用c做项目的python程序员。我需要将字母映射到与它们对应的usb发送代码。在python中,我会在字典中进行硬编码。在C中我使用了一个巨大的switch
语句。还有更好的方法吗?
switch(c){
case 'a':
return "x04";
break;
case 'b':
return "x05";
break;
case 'c':
return "x06";
break;
答案 0 :(得分:2)
就我而言,我创建了一个查找表:
static char sendcodes[256][5]; // declared outside of any function;
// "static" means it's only visible
// within the current source file
void init_sendcodes( void )
{
for ( unsigned char c = 'a'; c <= 'z'; c++ )
sprintf( sendcodes[c], "%02hhx", c - 'a' + 4 );
}
char *mapSendcode( char c )
{
return sendcodes[c];
}
请注意,此代码假定'a'
到'z'
是连续的编码(ASCII或UTF-8)。如果他们不是,那么,您将不得不使用多个循环。
完成后,sendcode['a']
包含字符串"0x04"
,sendcode['b']
包含"0x05"
等。因此,虽然初始化表需要一些工作,你只需要在程序开始时执行一次 - 之后它只是一个数组查找。
答案 1 :(得分:1)
假设您的系统使用的是ASCII或UTF-8字符编码,拉丁字母a-z是连续的,您可以创建一个值数组:
'a'
然后你会通过从有问题的字母中减去return sendcodes[c - 'a'];
来索引它,给你一个从0到25的索引:
On Hold Begins
答案 2 :(得分:0)
您可以尝试使用并行数组,只要两个数组中的数据量相同即可。只需遍历第一个数组并使用变量i
作为第二个数组的索引:
char array1[] = {'a', 'b', 'c'};
char *array2[] = {"x04", "x05", "x06"};
for (int i=0; i<sizeof(array1)/sizeof(array1[0]); i++)
{
printf("%s\n", array2[i]);
}