我正在尝试创建一个函数,它可以让我查看一个结构数组,并返回某个成员的值与输入匹配的那个。我找到了另一个线程,其中一个人有一个熟悉的问题,但它似乎对我不起作用。另一个线程可以在这里找到:Get a struct based on member values
我有结构:
typedef struct
{
uint8_t register_id;
uint8_t size; //In bytes
char * name;
char * access;
} Register;
我做了一个数组:
Register VN100_registers[4] = {
{9, 16, "Attitude Quaternion", "read only"},
{17, 12, "Magnetic measurements", "read only"},
{18, 12, "Acceleration measurements", "read only"},
{19, 12, "Angular rate measurements", "read only"},
};
我使用这个功能:
static Register* GetVN100Register(const void* value_ptr, const size_t offset, const size_t field_size)
{
for (uint32_t i = 0; i < N_ELEMS(VN100_registers); i++)
{
if (0 == memcmp(value_ptr, ((unsigned char*)&VN100_registers[i])+offset, field_size))
{
return &VN100_registers[i];
}
}
return NULL;
}
它应该指向数组 VN100_registers 中的结构,其中成员值与函数输入匹配。
我初始化变量:
Register *test_ptr;
uint32_t value_to_find;
并调用函数:
value_to_find = 18;
test_ptr = GetVN100Register(&value_to_find, offsetof(Register, register_id), sizeof(value_to_find));
我应该指向数组的第三个结构,但是当我调试时,我得到了这个: