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';