2 байта, короткие в 2 байта строки в C?

Любой способ преобразовать 2-байтовое короткое (обычное короткое) в просто 2-байтовую строку (char*) после использования htons на этом коротком. Дело в том, что метод htons возвращает int (4 байта), как мне поместить его в 2-байтовую строку???

Примечание: мне нужно иметь возможность использовать ntohs для результата, чтобы получить исходное значение.

Спасибо за совет:D

2 ответа

Решение

Ах, как вы говорите, htons возвращает 4-байтовое целое число, на моем Linux, Htons имеет прототип

uint16_t htons(uint16_t hostshort);

Таким образом, вы можете сделать

uint16_t value;
value = htons(hostshort);
char *bytes = &value;
// now the first 2 bytes pointed to by "bytes" are the value in network byte order

Это означает, что возвращаемое значение составляет всего 2 байта.

Тогда я думаю, что после htons гарантировано, что такое представление битов в возвращаемом значении таково, что первый байт значения (((unsigned char *)value)[0]) является наиболее значимым, а второй - наименее значимым.

short i;
// ...
char s [3];
s [0] = (i >> 8) & 0xFF;
s [1] = i & 0xFF;
s [2] = '\0';
Другие вопросы по тегам