在我的.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
}
}
答案 0 :(得分:1)
也许你想要这样的东西:
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 };
现在您可以遍历sigantures
数组。但是,你不知道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
}
}