Я хочу отправить массив символов через tcp-сокет в unix.Отправка массива символов C через сокет
Моя первая идея состояла в том, чтобы использовать обычный массив символов для структуры, которая будет отправлена через сокет:
typedef struct __attribute__((packed))
{
uint8_t type;
uint8_t id_index;
char char_value[STR_MSG_MAX];
} a_msg;
Просто потому, что C символ всегда 8 бит длиной. Однако после некоторого поиска в Google я обнаружил, что даже если char всегда имеет длину 8 бит, базовое представление может фактически быть 32-битным целым числом. Поэтому у меня сложилось впечатление, что char, возможно, не лучший способ представить строку в сообщении, которое будет отправлено через сокет из FreeBSd в Linux (или введите некоторые другие unixes, если вы хотите =) ...).
stdint.h присутствует во всех современных unixes на день (я надеюсь), и мои мысли в том, что, возможно, массив uint8_t или int8_t мог бы сделать трюк.
typedef struct __attribute__((packed))
{
uint8_t type;
uint8_t id_index;
uint8_t char_value[STR_MSG_MAX];
} a_msg;
или
typedef struct __attribute__((packed))
{
uint8_t type;
uint8_t id_index;
int8_t char_value[STR_MSG_MAX];
} a_msg;
Однако uint8_t это символ без знака и int8_t является знаковым символом. Стандартный символ C не является ни тем, что реализация не определена, как я ее понимаю.
Мои вопросы: Каков наилучший способ представления массива символов (строки) в C, который будет отправлен через TCP/IP в * NIX (Linux, FreeBSD и т.д.) независимо от платформы способом.
Лучший способ отправить строку - это, вероятно, просто «написать» необработанную строку. Наверное, вы хотите отправить структуру, которую вы показываете, за один раз, а не только данные символа? – gnud