我是一个用c语言做项目的python程序员,我需要将字母映射到与之对应的usb发送代码。在python中,我会在字典中硬编码。在C中,我使用了一个巨大的switch语句。有更好的办法吗?

switch(c){
    case 'a':
        return "x04";
        break;
    case 'b':
        return "x05";
        break;
    case 'c':
        return "x06";
        break;

最佳答案

对于我来说,我会创建一个查找表:

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",等等。因此,虽然初始化表需要一些工作,但只需在程序开始时执行一次,之后只是一次数组查找。

关于c - 在c中将某些值映射到其他值的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48774550/

10-09 08:43