Хочу разбить float на 4 байта - C (СИ)
Формулировка задачи:
Разбираясь с winsock2 понадобилось передавать по сети разные типы данных, а т.к. стандартные функции передачи и посылки сообщений по TCP и UDP протоколу используют только чаровские массивы, то надо всё разбивать на байты. Собственно вот попытка разбить FLOAT на 4 байта, но получается что-то не то... Идея с использованием указателя на INT нагуглена и вроде бы должна быть правильной...
Собственно код:
Результат в приложении
char sendbuf[200]; char recvbuf[200] = ""; float forSending[6]; for (int i = 0; i<6; i++) forSending[i] = 1.111 * i + 1.111; printf("For sending:\n"); for (int i = 0; i<6; i++) printf("%f\n",forSending[i]); //float to char convertation: printf("Float to char:\n"); for (int i = 0; i<6; i++) { int* tempPtr = (int*) (&forSending[i]); printf("%f\n", *tempPtr); for (int k = 0 ; k<4; k++) sendbuf[i*4+k] = (*tempPtr >> 8*(3-k)) & 255; }
Решение задачи: «Хочу разбить float на 4 байта»
textual
Листинг программы
recv( socket, (char *)&f_val, sizeof( f_val ), 0 );
Объяснение кода листинга программы
В данном коде происходит следующее:
- Принимается сетевой пакет с помощью функции recv()
- В параметрах функции recv() указывается:
- сокет, через который происходит прием пакета
- буфер, в который будет записан пришедший пакет (в данном случае, это (char *)&f_val)
- размер буфера в байтах (в данном случае, это sizeof( f_val ))
- параметр, указывающий, что сетевой пакет нужно принять полностью (в данном случае, это 0) В результате выполнения данного кода, в буфер (в данном случае, это (char *)&f_val) будет записан пришедший сетевой пакет. Размер пакета будет равен 4 байтам (так как тип данных f_val - float, и он занимает 4 байта памяти).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д