адрес ipv6 printf с использованием struct in6_addr и адрес ipv4 с использованием u_int32_t

Я хочу printf значения адреса ipv6 с типом struct in6_addr и адреса ipv4 с типом u_int32_t на консоль.

Я пробовал приведение типов, но это дает ошибку

error: aggregate value used where an integer was expected
printf("---------------- ipv4= %zu ipv6 = %zu ",(size_t)ipv4, (size_t)ipv6);

Я также пробовал %s ,%lu и многие другие способы после изучения старого вопроса в переполнении стека и других местах.

Если у кого есть решение, буду очень благодарен.


person Altanai    schedule 14.04.2014    source источник
comment
посмотрите stackoverflow.com/questions/3727421/   -  person Jayesh Bhoi    schedule 14.04.2014


Ответы (1)


in6_addr — это структура, содержащая объединение, вы не можете просто привести ее к size_t и надеяться, что она сработает. Вы должны использовать inet_ntop, чтобы преобразовать его в удобочитаемую форму. См. http://www.beej.us/guide/bgnet/output/html/multipage/inet%5fntopman.html для получения дополнительной информации.

person Shimon Rachlenko    schedule 14.04.2014
comment
С того момента, как я услышал об inet_ntop, я пытался передать свой ipv6-адрес этой функции и получить строку, которую можно использовать для дальнейшей обработки. Однако я могу найти подходящую реализацию. У вас есть код C, который достигает этого? - person Altanai; 15.04.2014