Хочу разбить 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 байта памяти).