Я думаю, что это довольно прямая проблема, но я до сих пор не могу понять это.добавить и удалить из (void *) в C
У меня есть функция, которая отправляет поток по сети. Естественно, это имеет константную пустоту * в качестве аргумента:
void network_send(const void* data, long data_length)
я пытаюсь предварять конкретный заголовок в виде полукокс * до этого перед отправкой его через сокет:
long sent_size = strlen(header)+data_length;
data_to_send = malloc(sent_size);
memcpy(data_to_send,header,strlen(header)); /*first copy the header*/
memcpy((char*)data_to_send+strlen(header),data,dat_length); /*now copy the actual data*/
это работает до тех пор, пока данные на самом деле char *. но если он изменится на другой тип данных, это перестанет работать.
При получении, мне нужно удалить заголовок из данных перед его обработкой. так вот как это делается:
void network_data_received(const void* data, long data_length)
{
........
memmove(data_from_network,(char*)data_from_network + strlen(header),data_length); /*move the data to the beginning of the array*/
ProcessFurther(data_from_network ,data_length - strlen(header)) /*data_length - strlen(header) causes the function ProcessFurther to read only certain part of the array*/
}
Это снова работает нормально, если данные имеют тип char. но сбой, если он имеет какой-либо другой тип.
Может ли кто-нибудь предложить, как правильно это реализовать?
С уважением, Хан
Как вы называете эти функции? Можете ли вы предоставить код? – detunized
Вы не используете data_length, используя 'strlen', не так ли? Это действительно правильная функция для вашего заголовка? – Rup
проблема заключается в использовании (char *) data_to_send + strlen (header) –