C-在32或64位的一个字节中检测ASCII CHAR



当我想在C中更快地编码strlen时(比字节检查字节检查的速度更快),我发现了此宏:

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

此宏读取4个字节并返回(1),当它找到至少一个nul字节时。否则它将返回(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的字节。

相关内容

  • 没有找到相关文章

最新更新