在C中执行查找表的最佳方法是什么?

PIC*_*ain 12 c lookup-tables

我正在开发一个嵌入式C项目.我有一个LCD显示屏,每个字符有一个5x7点阵.要显示特定字符​​,您必须移动5个字节,与要打开的点相关联.所以我需要使用一个键来制作某种查找表,我可以传入一个ASCII字符,然后返回一个包含5个字节的数组...例如,调用这个函数就像这样,

GetDisplayBytes('A');

应该返回`这样的数组......

C[0] = 0x7E : C[1] = 0x90 : C[2] = 0x90 : C[3] = 0x90 : C[4] = 0x7E

在C中这样做的最佳方法是什么?

Car*_*rum 14

我会为你想要使用的连续ASCII块创建数组.数据.像这样的东西:

uint8_t displayBytesLetters[] = 
{
  0x73, 0x90, 0x90, 0x90, 0x73, // 'A'
  .
  .
  .
};

uint8_t displayBytesDigits[] = 
{
  0x12, 0x15, 0x25, 0x58, 0x80, // '0'
  .
  .
  .
};
Run Code Online (Sandbox Code Playgroud)

然后你的GetDisplayBytes()是这样的:

uint8_t *GetDisplayBytes(char c)
{
  if (isdigit(c))
    return &displayBytes[5*(c - '0')];
  else if (isupper(c))
    return &displayBytes[5*(c - 'A')];
  else
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

将返回的指针传递给任何函数输出数据:

void DoDisplay(uint8_t *displayBytes)
{
  int i;
  for (i = 0; i < 5; i++) 
  {
     SendOutput(displayBytes[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 然后,代替`(c - 'A')`,编写一个函数/宏,它将把你支持的ASCII字符作为输入,并作为输出返回一个索引号(有点像迷你哈希函数).您可能也想要处理非法字符输入. (5认同)