Массив int8_t, а не uint8_t
uint8_t foo[] = {7, 7};
int i = ((foo[0] + 256 * foo[1]) ^ 0x8000) - 0x8000; как будет выглядеть эта формула, если допустим массив будет из 4-х цифр?
foo[0] + 256 * (foo[1] + 256 * (foo[2] + 256 * foo[3]));{foo[0] + 256 * foo[1], foo[2] + 256 * foo[3]};как называется эта конвертация?
Matvey_Mt, можно начать с того, что ты хотел извлечь 16-битное значение, а
*(int*)foo.data()извлекает примерно 32 бита. Ну и там дальше ещё пара пунктов по мелочи, типа отсутствия гарантии выравнивания, зависимости от порядка байт используемой платформы, опять же беззнаковость извлечённого числа.В целом этот короткий вариант -- г*код.