Чтобы иметь то, что вы хотите, вы не можете иметь каждое поле в качестве определенного фиксированного индекса в массиве пакетов, потому что каждая позиция может содержать только один байт. Вы должны сделать что-то вроде этого:
char address[] = "www.google.com";
int addressLen = strlen(address);
char* packet = (char *) malloc(sizeof(char)*6+addressLen);
int i;
packet[0] = 5;
...
packet[3] = 1;
packet[4] = addressLen;
for (i = 0; i < addressLen; i++)
packet[i + 5] = address[i];
packet[4 + addressLen] = 80;
РЕДАКТИРОВАТЬ: На самом деле я сделал этот пример для C. Должен работать в C ++, но я не знаю интерфейс сетевой библиотеки, которую вы используете. Этот malloc, вероятно, может быть заменен новым. Или вы можете использовать стандартные контейнеры, так как я думаю, что к ним также можно обращаться как к массиву.