簡體   English   中英

將數組值與C中的單個值進行比較

[英]Compare array values to a single value in C

我需要比較數組中的某些值以查看它們是否都是相同的單個值,比如說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支持memchrstrchr及其派生類,具體取決於您要使用它的程度。

如果您想自己實現它,而性能是一個問題,我建議內聯一個rep scasb的程序集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM