Привет, я пытаюсь объединить 2 uint32_t
, чтобы сделать 64-битное сообщение для отправки через сокет. Но я получаю следующую ошибку warning: left shift count >= width of type [-Wshift-count-overflow] uint64_t mensaje = (random_number << 32) | mensaje_temp;
Вот пример кода:
void send_msg(int num, int connsocket){
uint8_t largo = 6;
uint8_t type = 11;
uint16_t filler = 0;
uint32_t random_number = num;
uint16_t second_part = (type << 8) | largo;
uint32_t mensaje_temp = (filler << 16) | second_part;
uint64_t mensaje = (random_number << 32) | mensaje_temp;
size_t msg_length = 8;
char *new_msg = (char*)&mensaje;
}
Я только что сделал то же самое, чтобы объединить типы uint8_t
с похожим кодом, и это сработало. Любые советы о том, как безопасно манипулировать данными этого типа, были бы замечательными.
mensaje = (((uint64_t) random_number) << 32) | mensaje_temp;
Аналогично. если вы идете другим путем, убедитесь, что конвертируете в более узкий тип после сдвига вправо. - person zwol   schedule 07.06.2017