我正在开发一个 GUI 框架,我希望所有元素都由最多 8 个字符(或 7 个字符也可以)的 ascii 字符串标识。
每次触发事件(有的只是点击,有的是连续的),框架会回调给客户端代码id和它的值。
我可以使用实际的字符串和 strcmp(),但我希望它非常快(对于移动设备),所以我想使用 char 常量(例如 int id = 'BTN1';)所以你会进行单个 int 比较以测试 id。但是,4 个字符的可读性不够。
我尝试了一个实验,比如- long int id = L'abcdefg';
...但看起来好像 char 常量只能容纳 4 个字符,而使 long int char 常量唯一能给你的是你的 4 个字符的宽度是两倍的能力,而不是两倍的数量人物。我在这里遗漏了什么吗?
我想让编写客户端代码的人轻松一些。 gui 存储在 xml 中,因此 id 是从字符串中加载的,但是在客户端代码中会写入常量以将它们与它们进行比较。
总而言之,我正在寻找一种跨平台的方式来快速比较 7-8 个字符,有什么想法吗?
最佳答案
您确定这不是过早的优化吗?您是否分析过另一个纯粹因字符串比较而变慢的 GUI 框架?为什么您如此确定字符串比较会太慢?您肯定不会进行那么 很多字符串比较。此外,考虑 strcmp 应该有一个接近最佳的实现,可能是用为您正在编译的 CPU 量身定制的程序集编写的。
无论如何,其他框架只是使用命名整数,例如:
static const int MY_BUTTON_ID = 1;
您可以考虑这样做,完全避免字符串问题。或者,您可以简单地编写一个辅助函数来将 const char[9] 转换为 64 位整数。这应该接受一个以 null 结尾的字符串“像这样”最多 8 个字符(假设您打算丢弃空字符)。然后你的程序正在传递 64 位整数,但程序员正在处理字符串。
编辑:这是一个将字符串转换为数字的快速函数:
__int64 makeid(const char* str)
{
__int64 ret = 0;
strncpy((char*)&ret, str, sizeof(__int64));
return ret;
}
关于c++ - 快速 64 位比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2364312/