2016-04-14 1 views
0

я положить IP address от кадра к структуры:Преобразование IP-адрес из шестнадцатеричной в десятичную с помощью strtol()

unsigned char destination_address[4]; 

В моей основной программе я загружаю-структуру:

struct ipv4 naglowek_ipv4; 
upakuj_ipv4(bufor_eth_ipv4, &naglowek_ipv4); 

И попробуйте показать это в «удобочитаемом формате»:

printf("Destination Adress: %ld.%ld.%ld.%ld\n", 
    strtol(naglowek_ipv4.destination_address[0],NULL,16), 
    strtol(naglowek_ipv4.destination_address[1],NULL,16), 
    strtol(naglowek_ipv4.destination_address[2],NULL,16), 
    strtol(naglowek_ipv4.destination_address[3])); 

Это не отражается так, как я думаю. Кто-нибудь знает, почему?

+0

(Любой более знакомы с тем, что «я помещаю IP-адрес из фрейма в структуру» и другие странности здесь означают, пожалуйста, не стесняйтесь уточнять в edit, thx) – Will

ответ

1

destination_address не является строкой, это всего лишь массив из четырех байтов. Так упростить вызов:

printf("Destination Adress: %d.%d.%d.%d\n", 
     naglowek_ipv4.destination_address[0], 
     naglowek_ipv4.destination_address[1], 
     naglowek_ipv4.destination_address[2], 
     naglowek_ipv4.destination_address[3]); 

Вы заметили бы, если вы включили декларацию strtol (а также тот факт, вы не передаете достаточно параметров последнего вызова):

#include <stdlib.h> /* provides strtol() function */ 
+0

У вас есть права. Я слишком усложняюсь. Cen, вы мне так говорите, как я могу изменить unsigned short to decimal? Один и тот же пример, но char изменяется на короткий: unsigned short life_time: 8; –

+0

@AxelGocan: 'printf ("% u ", (unsigned) life_time)' или использовать буфер 'char buf [16]; sprintf (buf, "% u", (unsigned) life_time); –

Смежные вопросы