ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
15 января
1462070 Топик полностью
SciFi (09.09.2024 09:49 - 10:41, просмотров: 305) ответил IBAH на чтобы знак не потерялся, два преобразования сначала бесзнакового к знаковому, а потом расширение до 32
Как-то так: 
int32_t convert(uint8_t b1, uint8_t b2, uint8_t b3)
{
    int32_t ret = (b1 << 24) + (b2 << 16) + (b3 << 8);
    return ret >> 8;
} 


Здесь предполагается, что сдвиг вправо сохраняет знак. Стандарт Си этого не гарантирует, но обычно всё нормально. Вернее, если не сохраняет, то это какой-то чудесатый компилятор для процессора, слепленного из древнего говна мамонта вымершими неандертальцами. То есть такого не бывает. А если порядок байтов совпал как надо, то можно так:

int32_t convert(const uint8_t b[3])
{
    int32_t ret;
    memcpy(&ret, b, 3);
    return ret >> 8;
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้