Маска с 48 однобитными: 0xffffffffffff
uint64_t value = <something>;
uint48_t answer = src & 0xffffffffffff;
Но если вы знаете, что 2 MSB равны нулю, вам не нужно делать никаких маскировок, просто присвойте переменные:
uint48_t answer = value;
Чтобы сохранить их в байтовом массиве, сдвиньте на соответствующее количество байтов и замаскируйте с помощью 0xff
, чтобы получить один байт.
uint8_t bytes[6];
for (int i = 0; i < 6; i++) {
bytes[i] = (value >> (40 - 8 * i)) & 0xff;
}
Вы можете использовать либо оригинальное 64-битное значение, либо 48-битное значение, это работает для любого размера не менее 6 байтов.