Здесь в вашем коде есть что-то странное
uint8_t fake_out;
gnuvalue = uint32_pack (hexvalue, fake_out);
, в то время как прототипу для uint32_pack нужно uint8_t *
, поэтому оно должно быть &fake_out
.А затем, чтобы вернуть его, вам нужно просто разыменовать указатель, чтобы изменить fake_out, что-то вроде *out = value;
.
Если вам нужно вернуть два значения (gnuvalue и fake_out), вот как вы можете.
Другим вариантом может быть возвращение указателя на структуру malloc-ed в функции (тогда вам нужно ее рано или поздно освободить), и структура содержит как "gnuvalue", так и "fake_out".