これはかなり単純な問題だと思いますが、まだ理解できません。
ネットワーク経由でストリームを送信する機能があります。当然、これは const void * を引数として取ります:
void network_send(const void* data, long data_length)
ソケット経由で送信する前に、特定のヘッダーを char* の形式でこれに付加しようとしています:
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 型の場合、これも問題なく機能します。ただし、タイプが異なる場合はクラッシュします。
これを適切に実装する方法を誰かが提案できますか?
よろしく、カーン