十六进制IP转换点分十进制代码

以下是一个可以实现将输入的十六进制格式的IP地址转换为点分十进制格式并输出的简单程序。它使用了 sscanf 函数将输入的字符串解析成无符号整数,然后使用 inet_ntoa 函数将其转换成点分十进制格式,并打印输出:

c 复制代码
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    char hex_ip[9]; // 用于存储输入的十六进制格式的IP地址,需要8个字符的空间,加上字符串结尾符'\0'共9个字符
    printf("请输入一个十六进制格式的IP地址:");
    scanf("%8s", hex_ip); // 读入输入的十六进制格式的IP地址,最多只读入8个字符

    unsigned int ip_val;
    sscanf(hex_ip, "%x", &ip_val);

    struct in_addr addr;
    addr.s_addr = htonl(ip_val);

    char *ip_str = inet_ntoa(addr);
    printf("对应的点分十进制格式IP地址为:%s\n", ip_str);

    return 0;
}

当您运行以上代码时,它将首先提示您输入一个十六进制格式的IP地址。请务必确保输入的字符串是正确的,且长度不超过8个字符(不包括字符串结尾符'\0')。

此外,,inet_ntoa 函数返回的是静态分配的内存空间,多次调用该函数会覆盖先前的结果。如果您需要在程序中保存多个IP地址,请将其复制到其他的内存区域或使用更加安全的函数进行转换。

相关推荐
✧˖‹gσσ∂ иιghт›✧15 分钟前
esp32 s3 修改本地ip和服务器IP
服务器·网络协议·tcp/ip
Ares-Wang16 分钟前
网络》》防火墙
运维·服务器·网络
可爱又迷人的反派角色“yang”17 分钟前
k8s(四)
linux·网络·云原生·容器·kubernetes·云计算
qq_4112624218 分钟前
优化wifi的性能,LWIP_TCP_WND是不是指的是DYNAMIC_RX_BUFFER动态接受缓冲区的缓冲区大小
网络·网络协议·tcp/ip
funnycoffee12321 分钟前
华为路由器或3层设备接口下的arp broadcast enable作用是啥?
网络·华为
阿杰 AJie29 分钟前
如何将公司公网ip绑定到服务器和域名
服务器·网络·tcp/ip
sublime8837 分钟前
JNPF快速开发平台存在任意文件读取漏洞 附PO
网络·安全·web安全·网络安全
山有木兮啊43 分钟前
MSS Clamping (MSS Adjustment)
网络
计算机小手1 小时前
内网穿透系列十六:使用 wg-easy 快速搭建基于 wireguard 的虚拟局域网,支持Docker部署
经验分享·网络协议·docker·开源软件
青果网络_xz1 小时前
海外HTTP代理适合哪些业务?与Socks/隧道的区别
网络·网络协议·http