Я бы запомнил это, что-то вроде
memcpy(buffer, &s_int, 2);
Порядковый порядок сохраняется правильно, так что если вы приведете буфер к unsigned short *, вы сможете прочитать то же значение s_int правильным образом. Другое решение должно быть с поддержкой endian, иначе вы можете поменять местами lsb и msb. И конечно размер (короткий) должен быть 2.