//alt_u16 - это тип данных, беззнаковое двухбайтное, можно считать что unsigned shortchar bufRecive[100];alt_u16* p = reinterpret_cast<alt_u16*>(&bufRecive[0]);*p = 0x1234;p = reinterpret_cast<alt_u16*>(&bufRecive[1]);*p = 0x7890;p = reinterpret_cast<alt_u16*>(&bufRecive[2]);*p = 0x4321;p = reinterpret_cast<alt_u16*>(&bufRecive[3]);*p = 0x0987;p = reinterpret_cast<alt_u16*>(&bufRecive[4]);*p = 0x6571;p = reinterpret_cast<alt_u16*>(&bufRecive[5]);*p = 0x4294;p = reinterpret_cast<alt_u16*>(&bufRecive[6]);*p = 0x5302;p = reinterpret_cast<alt_u16*>(&bufRecive[7]);*p = 0x0192;
char array[10]; //в отладчике посмотрел адрес размещения массива, пусть будет 0x00801C4short *p = (short *)array;//после этого р равен 0x00801C4*p = 0x1234; //после этого по адресу 0x00801C4 размещается 0х34, по адресу 0x00801C5 0х12. Всё правильно // т.е. array[0] = 0х34, array[1] = 0х12 //теперь сделаем указатель на нечетный адресp = 0x00801C5;//можно тем же reinterpretate_cast<short*>(&array[1]), у меня не было этой строчки, //я сделал точку останова и руками выставил нужный адрес*p = 0x5678;
char array[100];int count = f();array[16] = count;array[17] = count>>8;array[18] = count>>16;array[19] = count>>24;
char array[10];int i;i = *static_cast<int*>(array);
C++ (Qt)template <typename T>void buf_write (char * & b, T data){ union { T t; char bytes [sizeof (T)]; } u = {data}; for (int i = 0; i < sizeof (u.bytes); ++i) *b++ = u.bytes [i];} ... char buf [99];char *b = buf;buf_write (b, (char) address);buf_write (b, (short) packet_length);buf_write (b, (short) command);buf_write (b, (int) X);buf_write (b, (float) temper);
C++ (Qt)alt_u16 bufRecive[100]; bufRecive[0] = 0x1234;bufRecive[1] = 0x7890;.... char *buf = (char *)bufRecive; //do something with buf
C++ (Qt)char buf[200];memset(buf, 0xAA, sizeof(buf));unsigned short * test = (unsigned short *)(buf + 1);*test = 0x1234;
C++ (Qt)#pragma pack(push, 1)struct packet{ char address; short length; short command; float temper;...} p = {'0', 1, 2, .3, ...};#pragma pack(pop)