¿Cómo leer la dirección IP de un archivo en Windows y convertirla a un formato largo sin firma en lenguaje C?
# include & ltstdlib.h & gt
# include & ltstring.h & gt
/* IP en caracteres Convierte el formato de cadena a entero.
Parámetros:
IP en forma de cadena rayada.
intIP es el número entero después de una conversión exitosa.
Devolver:
Si la conversión falla, devuelve 0; en caso contrario, devuelve 1.
*/
int strToInt(char strIP[], unsigned long *intIP)
{
int longitud = strlen(strIP
int i=0, k=3, parte = 0;
* intIP = 0; ; i++)
{
if(strIP[i]== ' . '|| strIP[i]=='\0 ')
( * intIP)| =(parte & lt;& lt(k - *8)), parte = 0;
else if(strIP[I]>= ' 0 ' & amp& ampstrIP [I] <='9')
part = part * 1(strIP[I]-' 0 ');
Otros
Devuelve 0; /p>
}
Retorno 1;
}
/* IP se convierte en un número entero en forma de cadena.
Parámetros:
IP entera
StrIP convierte IP en forma de cadena.
Devolver:
Si la conversión falla, devuelve 0; en caso contrario, devuelve 1.
*/
int intToStr(unsigned long intIP, char strIP[])
{
int buf[4 ],I ;
for(I = 0;i<4;i++)
{
buf[I]= intIP % 256;
intIP /= 256;
}
Si (intIP!=0)
Devuelve 0;
Otros
{
sprintf(strIP, " %d.%d.%d.%d ",buf[3],buf[2],buf[1],buf[0 ]); p>
Devolver 1;
}
}
int main(int argc, char *argv[]) p>
{
char strIP[16];
Unsigned long intIP
// ip se guarda en el archivo ips.txt. Aquí se utiliza la redirección de entrada para facilitar aporte.
if(freopen("ips.txt","r",stdin)!=empty)
{
//Bucle para leer la cadena, hasta el final del archivo.
while(scanf("%s ",strIP)!=EOF)
{
//Palabra de IP de cadena a IP entera
if(strToInt(strIP, & ampintIP))
{
Printf ("IP de cadena convertida a entero: %s (cadena) = %lu (decimal) = % lX(hex)\n ",strIP,intIP,intIP);
//Invertir la conversión de IP entera a IP de cadena y verificar la exactitud de la conversión.
intToStr(intIP, strIP);
Printf("Convertir entero a IP de cadena: % lu (decimal) = %lX (hexadecimal) = %s (cadena de caracteres)\n \n ", intIP, intIP, strIP);
}
Otro
{
Printf("% s no es un IP legal! \n\n ",strIP);
}
}
}
Otros
{
Printf("¡No se puede abrir el archivo ip! \ n "
}
scanf("%d ", & ampintIP) ;
System("pause");
Devuelve 0;
}
/*
Caracteres Convierte el IP de cadena a un número entero: 202.112.1 (cadena) = 3396371 (decimal) = CA700101 (decimal)
Hexadecimal)
Convierte el número entero a una IP de cadena: 3396337921 (Decimal) = CA700101 (Hex) = 202.112.1 (
String)
/¡No es una IP legal!
Convertir IP de cadena a entero: 255.255.255.0 (cadena) = 4294967040 (decimal) = FFFFFF00 (
Hexadecimal)
Conversión de entero en una IP de cadena: 4294967040 (decimal) = FFFFFF00 (hexadecimal) = 255.255.255.0.
(String)
Convierte la cadena IP en un número entero: 202.112.1.2 (String) = 3396337922 (Decimal) = CA700102 (Diez
Dieciséis Base)
Convertir entero a IP de cadena: 3396337922 (decimal) = CA700102 (hexadecimal) = 202.112.1.2 (
Cadena)
/¡No es una IP legal!
Convertir IP de cadena a entero: 255.255.255.0 (cadena) = 4294967040 (decimal) = FFFFFF00 (
Hexadecimal)
Conversión de entero en una IP de cadena: 4294967040 (decimal) = FFFFFF00 (hexadecimal) = 255.255.255.0.
(String)
Convierte la cadena IP en un número entero: 202.112.2.1 (String) = 33968177 (Decimal) = CA700201 (Diez
Dieciséis Base)
Convertir entero a IP de cadena: 3396338177 (decimal) = CA700201 (hexadecimal) = 202.112.2.1 (
Cadena)
/¡No es una IP legal!
Convertir IP de cadena a entero: 255.255.255.0 (cadena) = 4294967040 (decimal) = FFFFFF00 (
Hexadecimal)
Conversión de entero en una IP de cadena: 4294967040 (decimal) = FFFFFF00 (hexadecimal) = 255.255.255.0.
(Cadena)
*/