gpt4 book ai didi

c++ - 类型 cast char array[16] to int 128 bits

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:29 24 4
gpt4 key购买 nike

我有两个 16 字节的字符数组:

char word[WORD_LENGTH] = { '1', '2', '3', '4', '5', '6','7','8','9','0','1','2','3','4','5','\0'};
char word2[WORD_LENGTH] = { '1', '2', '3', '4', '5', '6','7','8','9','0','1','2','3','4','5','\0'};

我正在寻找一种比逐字符比较更快地比较两个字符数组的方法。据我所知,我认为我可以使用类型转换将 char 数组转换为 128 int;像这样

__int128 value = (__int128) word;
__int128 value2 = (__int128) word2;

但是这些都不行,因为value和value2包含了word和word2的地址。

如何将 char 数组转换为 __int128?

最佳答案

注意:您询问的是两种语言,并没有指明您实际使用的是哪种语言。我会尽量回答这两个问题,但我对 C 的了解已经过时了很多年,所以我可能会在那里弄错一些细节。

有几个选项;您必须测量它们以确定哪个在您的环境中最快。

std::equal(在 C++ 中)或 memcmp(在 C 中)的良好实现可能会针对已知大小的小数组进行优化。这可能就足够了。

将字节重新解释为另一种类型的唯一明确定义的方法是复制它们:

__int128 value;
copy(begin(word), end(word), reinterpret_cast<char*>(&value)); // C++
memcpy((char*)(&value), word, WORD_SIZE) // C

编译器可能会也可能不会优化它以加载单词而不是字节。

如果一切都失败了,你可以求助于正式未定义的行为:

__int128 value = *reinterpret_cast<__int128*>(word); // *(__int128*)word in C

在某些平台上,如果数组未适当对齐或出于其他原因,这可能会失败。

关于c++ - 类型 cast char array[16] to int 128 bits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27566896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com