#include <stdio.h>
#include <stdint.h>
void build_packet(uint8_t command, uint16_t value, uint8_t status, uint32_t checksum) {
uint8_t buffer[10];
buffer[0]=0xA5;
buffer[1]=command;
buffer[2]=value;
buffer[3]=(value>>8);
buffer[4]=status;
buffer[5]=(checksum&0xFF);
buffer[6]=(checksum&(0xFF<<8))>>8;
buffer[7]=(checksum&(0xFF<<16))>>16;
buffer[8]=(checksum&(0xFF<<24))>>24;
buffer[9]=0x5A;
for(int i=0; i<=9;i++){
printf("%d ", buffer[i]);
}
/*
uint32_t tot=0x00;
tot |= ((0xA5) | (command<<8) | (value<<16) | (status<<32) | (checksum<<40) | (0x5A<<72));
for(int i=0; i<=9; i++){
//printf("%d ", ((tot&(0xFF<<8*i)))>>8*i);
//printf("%d ", (tot&0xFF));
printf("%d ", tot);
tot=tot>>8;
}
*/
// Your logic to fill buffer
// Then print buffer
}
int main() {
uint8_t cmd, status;
uint16_t val;
uint32_t crc;
scanf("%hhu %hu %hhu %u", &cmd, &val, &status, &crc);
build_packet(cmd, val, status, crc);
return 0;
}The MSB bits are truncated if you assigns a 16 bit word to a 8bit value
Refer buffer[2]