Я создал систему динамической типизации на C, чтобы создать словарь, который может содержать значения разной ширины в битах. Структура динамического объекта:
typedef struct
{
void* Pointer;
unsigned char Size;
} Dynamic;
Мне нужно сравнить две из этих динамик, которые содержат показания A2D, а затем сравнить разницу со значением дельты, чтобы определить, произошло ли изменение. Одно из решений, которое мне удалось придумать, - привести их к массивам символов и сравнить их побайтно, но это не пахнет правильно. У меня также есть идея создать массив указателей на функции, основанный на количестве байтов (или, возможно, типа), которые занимает Dynamics, и просто сделать функцию сравнения для каждого поддерживаемого типа. Кто-нибудь может предложить другой подход? Такое ощущение, что я что-то упустил.
UPDATE:
Спасибо, что рассказали мне о memcmp, но у меня все еще есть проблема, как получить дельту двух значений? Из того, что я могу сказать, memcmp просто возвращает индикатор, значение которого больше, а не разницу между ними.
ОБНОВЛЕНИЕ ОБНОВЛЕНИЯ:
Оказывается, что memcmp для меня бесполезен, потому что архитектура, с которой я работаю, имеет младший порядок.
Если я собирался сделать реализацию bignum самостоятельно, тогда ephemient кажется правильным путем, но я решил, что просто собираюсь запоминать значения в максимально возможный тип (то есть unsigned long long), который у меня будет иметь дело с математикой и просто работать с ними. Я не могу придумать причину, по которой это не сработает, но я понимаю, что могу ошибаться, поскольку прямое манипулирование памятью в C / не является моей сильной стороной.