c - 如何创建静态常量数组的数组

标签 c arrays

在我的 .c 文件中,我有 jpg[4] 来检查某些文件中的 jpg 签名(使用 memcmp()):

static const unsigned __int8 jpg[4] = { 0xFF, 0xD8, 0xFF, 0xDB };

比较效果很好,现在我想添加一些更多的格式签名,例如:

static const unsigned __int8 png[8] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };

我不想复制具有不同签名变量的粘贴代码。如何创建此类不更改值的数组并使用for(;;)迭代每个签名。我不想在方法内声明它们。

我知道这是一些基本的东西,但我对 C 还很陌生,所以对我来说不是那么明显。

伪代码:

bool isImg(bool * value)
{
for(int index = 0; index < signatures count; i+++) <-- for should iterate through signatures
    {
        // use signature[index] which is array of bytes { 0xFF, Ox... }
        // check signature
    }
}

最佳答案

也许你想要这样的东西:

static const unsigned __int8 jpg[4] = { 0xFF, 0xD8, 0xFF, 0xDB };
static const unsigned __int8 png[8] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };

static const unsigned __int8 *signatures[] = { jpg, png };

现在您可以迭代 signantures 数组。但是您不知道 signatures 数组中每个签名的长度。

您可以通过对每个签名的第一个元素的长度进行编码来解决此问题:

static const unsigned __int8 jpg[] = { 4, 0xFF, 0xD8, 0xFF, 0xDB };
static const unsigned __int8 png[] = { 8, 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A };

static const unsigned __int8 *signatures[] = { jpg, png };

bool isImg(bool * value)
{
  for(int i = 0; i < (sizeof (signatures)) / (sizeof (__int8*)); i++)
  {
    const unsigned __int8 *signature = signatures[i];
    int signaturesize = signature[0]; // here: 4 for i==0, 8 for i==1

        // use signature[i] which is array of bytes { 0xFF, Ox... }
        // check signature
  }
}

关于c - 如何创建静态常量数组的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065218/

相关文章:

c - C 语言的 super 基本服务器-客户端应用程序

javascript - 使用的主题标签数组

ios - 遍历数组(Swift)

c - 为什么 scanf 不接受用户输入的结构?

c - Arduino 连接在随机时间段后循环失败

javascript - 根据多个属性和多个值过滤嵌套数组

java - 如何将 int[] 转换为 byte[]

c - 如何将指针数组归零

c - C 模式下的 Emacs 注释区域

c - 哪种方法对于初始化 wchar_t 字符串是正确的?