1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void MsgEncoding64(uint64_t &msg, uint64_t const &signal, uint8_t const offset,
uint8_t const bit_width) {
constexpr uint8_t bits_per_byte{8U};
constexpr uint8_t bitmask_size{64U};
uint64_t value_mask = ((1ULL << bit_width) - 1) & signal;
for (int i = 0; i < bit_width; i++) {
uint64_t current_bit_value = (value_mask >> i) & 1ULL;
uint8_t bit_postion_in_byte = (offset + i) % bits_per_byte;
uint8_t byte_index = (offset + i) / bits_per_byte;
msg |= current_bit_value
<< (bitmask_size - (byte_index + 1) * bits_per_byte +
bit_postion_in_byte);
}
}
|