gpt4 book ai didi

c - 在 32 位或 64 位的一个字节中检测 ascii 字符

转载 作者:行者123 更新时间:2023-12-05 04:01:55 25 4
gpt4 key购买 nike

当我想在 C 中编写一个更快的 strlen(比逐字节检查的代码)时,我发现了这个宏:

#define DETECTNULL(X) (((X) - 0x01010101) & ~(X) & 0x80808080)

该宏读取 4 个字节并在找到至少一个 NUL 字节时返回 (1)。否则返回 (0)。

我想知道是否可以使用相同的技术来查找 ascii 表的任何字符(我不喜欢使用逐字节循环)。

我尝试了很多组合,我能做的最好的是:

// in this example I wanted to find a '#'

int32_t detectsharp(int32_t c) {
c = ~(c - 0x24242424) & ~c;
return ((c - 0x01010101) & ~c & 0x80808080);
}

但它不适用于 0x22222222 ("""") 或 0x24212121 ($!!! )。

最佳答案

如果您之前使用 int 对它进行异或运算,它可以检测到任何字符。

#define DETECTCHAR(x,c) (DETECTNULL((x) ^ ((c)*0x01010101l) ))

乘法将 char 分布在 int 的 4 个字节中,xor 清除存在 char 的字节。

关于c - 在 32 位或 64 位的一个字节中检测 ascii 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843368/

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