c++ - 快速 64 位比较

标签 c++ string comparison

我正在开发一个 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/

相关文章:

python - 筛选比较,计算相似度得分,python

c++ - OpenCV mat::at 抛出异常

c++ - 为什么我会得到带有 protected 静态成员的 C2248(无法访问的成员)?

c++ - gnu缩进的谷歌c风格设置?

python - 如何使用列表(或元组)作为字符串格式化值

arrays - 使用嵌套填充创建二维字符串数组

c++ - Qt UTF-8 文件到 std::string 添加额外的字符

algorithm - 查找三个值中较大和较小值的最有效算法

c++ - vptr——虚拟表

php - 选择跨越 2 年(2012-2013)的所有生日