C中的IP地址输入

3
我想在C语言中编写一个程序,从用户处接收IP地址输入,然后对其进行一些位操作。我该如何在C语言中以位为单位接收输入?我尝试了下面的代码,但整数的大小为2个字节,这使得完整的地址长度为8个字节(64位)。使用char扫描输入时,会丢失输入的值。有没有办法只以32位(IPv4)或128位(IPv6)的方式接收输入?
    unsigned short int a,b,c,d;
scanf("%d.%d.%d.%d", &a,&b,&c,&d);
printf("%d\t%d\t%d\t%d\t", a, b, c, d);

事先感谢您。


使用 inet_addr() 函数解析点分十进制。 - Barmar
OT:unsigned short int 的格式说明符应为 %hu%d 期望的是 signed int - alk
十六进制格式对您是否合适("%x")?强制用户将其IP地址转换为例如ea070701(234.7.7.1)是否可行? - NiRR
2个回答

3
#include <stdio.h>

int main(void)
{
      unsigned char a,b,c,d;
      scanf("%hhu.%hhu.%hhu.%hhu", &a,&b,&c,&d);
      printf("%hhu\t%hhu\t%hhu\t%hhu\t", a, b, c, d);
      return 0;
}

提供

$ gcc t.c && ./a.out <<< 12.12.12.12
12  12  12  12

例如,可以查看此参考文献,了解应根据目标变量的类型使用哪个特定符号(该文档中的第3张表)。


你应该使用%hhu进行打印。 - 0xF1
我得到了不同的输出C:\Codes>ip_address_test.exe 8.8.8.8 0 0 0 8 C:\Codes>并且在编译时出现以下错误 unknown conversion type character 'h' in format完整代码和错误请参见... https://pastebin.com/0qqwY7uR - user9013730

0

使用%*c%d一起忽略数字之间的点。

在此处尝试代码;

IP地址程序

这将输出如下;

enter the ip address : 23.145.189.214
the entered ip address is 23.145.189.214

在 printf 函数中显示地址时,请确保使用 "."。当您所展示的输入采用点运算符时,由于编译器不知道该如何处理它,因此点运算符无法正常工作。它会出现为未识别的字符并导致程序停止执行。


1
感谢您在SO上提供答案!请将您的代码作为文本插入,而不是图片。有关更多信息,请参见https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when-asking-a-question。 - armitus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接