我有以下代码:
int some_array[256] = { ... };
int do_stuff(const char* str)
{
int index = *str;
return some_array[index];
}
显然上面的代码在某些平台上会导致错误,因为 *str 实际上可能是负数。
于是想到了两种可能的解决方案:
在赋值时转换值(
unsigned int index = (unsigned char)*str;
)。改为传递
const unsigned char*
。
编辑:这个问题的其余部分没有得到处理,所以我把它移到了一个新线程。
最佳答案
char
的符号性确实是平台相关的,但您所知道的是 char
的值与 unsigned char 的值一样多
,转换是单射的。因此,您完全可以强制转换值以将查找索引与每个字符相关联:
unsigned char idx = *str;
return arr[idx];
您当然应该确保 arr
至少有 UCHAR_MAX + 1
元素。 (当 sizeof(unsigned long long int) == 1
时,这可能会导致搞笑的边缘情况,幸运的是这种情况很少见。)
关于c++ - 从 const char* 参数中取出一个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41826072/