>Есть массив символов:
>char head[4] = {11,1,0,13}; Это не символы, это просто байты, так как head -- не строка:
* в середине встречаются нулевые байты
* в конце нет нулевого байта
>char* packet = new char;
>memcpy(packet,head,sizeof(head)); //
>
>В результате на выходе получается: 111013 : все нормально
Ничего нормального тут нет: выделена память под один char, а записываете аж 4 штуки.
>Далее необходимо присоединить к packet с cret, т.е.
>char cret[4] = {0,1,0,22};
>strcat(packet,cret); // Получается 1101300.., в cret[0]=0 - символ конца строки
>
>delete packet;
>
>Подскажите пожалуйста, как правильно присоединить cret к пакет.
Вы имеете дело с двоичными данными, в которых может встретиться (и встречается) нулевой байт. С такими данными нельзя работать строковыми функциями семейства str...() Нужно использовать только memcpy() и memmove()
При условии, вы исправите программу и она будет выделять достаточно памяти для packet, "присоединение" делается так:
memcpy(packet + sizeof(head), cret, sizeof(cret));
PS. Раз уже пишете настолько низкоуровневые вещи, попробуйте писать на чистом Си и использовать malloc() и free(). Заодно разберитесь с тем, что память -- это блоки, что такое арифметика с указателями и так далее.