我需要比较数组中的一些值,看看它们是否都是相同的单个值,比如 0xFF。是否有一个通用函数来执行此操作,例如 memcmp(),或者我必须以艰难的方式执行此操作并检查每个显式值,例如:
if ( ary[3] == 0xFF && ary[4] == 0xFF && ary[5] == 0xFF && ary[6] == 0xFF ... )
{
// do something
}
我显然可以像 memcmp 一样创建自己的函数,但如果我不需要,我不想重新发明轮子。
我需要比较数组中的一些值,看看它们是否都是相同的单个值,比如 0xFF。是否有一个通用函数来执行此操作,例如 memcmp(),或者我必须以艰难的方式执行此操作并检查每个显式值,例如:
if ( ary[3] == 0xFF && ary[4] == 0xFF && ary[5] == 0xFF && ary[6] == 0xFF ... )
{
// do something
}
我显然可以像 memcmp 一样创建自己的函数,但如果我不需要,我不想重新发明轮子。
我想一个完全通用的函数看起来像这样:
#include <string.h>
bool check_array (const void* array,
size_t array_n
const void* value,
size_t type_size)
{
const uint8_t* begin = array;
const uint8_t* end = begin + array_n * type_size;
const uint8_t* byte_val = value;
const uint8_t* byte_ptr;
for(byte_ptr = begin; byte_ptr < end; byte_ptr += type_size)
{
if( memcmp(byte_ptr,
byte_val,
type_size) != 0 )
{
return false;
}
}
return true;
}
int main()
{
int array [] = { ... };
bool result = check_array (array,
sizeof(array),
0x12345678,
sizeof(int));
}
从您的回答中,我看到您需要比较字节,在这种情况下string.h
支持memchr
,strchr
以及它们的衍生物,具体取决于您想要使用它的方式。
如果您想自己实现它,并且性能是一个问题,我建议您内联一个组装块rep scasb