How to convert IP address to char [] in Uint32_t to c?

I am writing a program that takes an IP address as an argument, and I wanted to store this IP address in unit32_t. I can easily convert uint32_t back to an array of characters. How to convert IP address in Char Array to uint32_t.

for instance

./IPtoCHAR 1079733050

uint32_t to IP address => 64.91.107.58

But how to write a program that performs the inverse task?

./CHARTOIP 64.91.107.58


for the first iptochar, this

unsigned int ipAddress = atoi (argv [1]);

printf ("IP address% d.% d.% d.% d \ n", (((ipAddress β†’ 24) and 0xFF), ((ipAddress β†’ 16) and 0xFF), ((ipAddress β†’ 8) and 0xFF) , (ipAddress and 0xFF));

But all of these below do not work

uint32_t aa = (uint32_t) ("64.91.107.58");

uint32_t aa = atoi ("64.91.107.58");

uint32_t aa = strtol ("64.91.107.58", NULL, 10);

+4
source share
2 answers

You are using inet_pton . Function

Conversely, you should have used inet_ntop .

+10
source

If you don’t have access to the inet_ * functions, or you need to code it yourself for some other strange reason, you can use this function:

 #include <stdio.h> /** * Convert human readable IPv4 address to UINT32 * @param pDottedQuad Input C string eg "192.168.0.1" * @param pIpAddr Output IP address as UINT32 * return 1 on success, else 0 */ int ipStringToNumber (const char* pDottedQuad, unsigned int * pIpAddr) { unsigned int byte3; unsigned int byte2; unsigned int byte1; unsigned int byte0; char dummyString[2]; /* The dummy string with specifier %1s searches for a non-whitespace char * after the last number. If it is found, the result of sscanf will be 5 * instead of 4, indicating an erroneous format of the ip-address. */ if (sscanf (pDottedQuad, "%u.%u.%u.%u%1s", &byte3, &byte2, &byte1, &byte0, dummyString) == 4) { if ( (byte3 < 256) && (byte2 < 256) && (byte1 < 256) && (byte0 < 256) ) { *pIpAddr = (byte3 << 24) + (byte2 << 16) + (byte1 << 8) + byte0; return 1; } } return 0; } 
+2
source

All Articles