Мне нужно иметь возможность отправлять числовое значение на удаленный сервер сокетов, поэтому мне необходимо кодировать возможные числа в байтах.
Числа до 64 бит, т.е. требуют до 8 байтов. Самый первый байт - это тип, и это всегда число до 255, поэтому помещается в 1 байт.
Например, если число было 8, а типом было 32-разрядное целое число без знака, тогда типом будет 7, который будет скопирован в первый (самый левый) байт, а затем следующие 4 байта будут закодированы с фактическим числом (В данном случае 8).
То есть в байтах:
byte1: 7
byte2: 0
byte3: 0
byte4: 0
byte5: 8
Надеюсь, это имеет смысл.
Этот код для выполнения этой кодировки выглядит как разумный подход?
int type = 7;
uint32_t number = 8;
unsigned char* msg7 = (unsigned char*)malloc(5);
unsigned char* p = msg7;
*p++ = type;
for (int i = sizeof(uint32_t) - 1; i >= 0; --i)
*p++ = number & 0xFF << (i * 8);