将数组值与C中的单个值进行比较

时间:2013-11-07 20:03:25

标签: c arrays comparison

我需要比较一个数组中的一些值,看看它们是否都是相同的单值,比如说0xFF。是否有一个共同的功能来执行此操作,例如memcmp(),或者我必须以艰难的方式执行此操作并检查每个显式值,例如:

if ( ary[3] == 0xFF && ary[4] == 0xFF && ary[5] == 0xFF && ary[6] == 0xFF ... )
{
// do something
}

显然我可以像memcmp一样自己动手,但如果不需要,我不想重新发明轮子。

2 个答案:

答案 0 :(得分:1)

我认为一个完全通用的函数看起来像这样:

#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));
}

答案 1 :(得分:0)

从你的回答中我发现你需要比较字节,在这种情况下string.h支持memchrstrchr及其衍生物,具体取决于你想要如何使用它。

如果你想自己实现它,并且性能是一个问题,我建议在rep scasb

中插入一个汇编块