c - 如何使用 inet_aton() 将 IP 地址转换为二进制形式
问题描述
我从手册页中了解到 inet_aton() 将 Internet 主机地址从 IPv4 数字和点表示法转换为二进制形式(按网络字节顺序)并将其存储在结构中。所以我尝试了下面的代码。如果我错了,有人可以纠正我:)谢谢
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc, char **argv)
{
struct in_addr addr;
char a[] = "192.168.24.29";
int ret = 0;
ret = inet_aton(a, &addr);
if (ret != 0)
printf("Valid\n");
else
printf("Invalid\n");
printf("%u\n", addr);
printf("%u\n", addr.s_addr);
}
输出:488155328 488155328
预期产量:11000000 10101000 00011000 00011101
inet_aton() 将 IPv4 格式转换为二进制表示法(1 和 0)。那么为什么它不提供二进制文件。我在这里尝试将数字转换为 8 位的二进制格式,因为我之前的输出是 488155328 我尝试将其转换为二进制。
#include<stdio.h>
void bin(unsigned n)
{
unsigned i;
for (i = 1 << 7; i > 0; i = i / 2)
(n & i)? printf("1"): printf("0");
}
int main(void)
{
bin(192);
printf("\n");
bin(168);
printf("\n");
bin(24);
printf("\n");
bin(29);
printf("\n");
printf("My conversion:");
bin(488155328);
}
输出:11000000 10101000 00011000 00011101 我的转换:11000000
预期是:我的转换应该是 11000000 10101000 00011000 00011101
解决方案
推荐阅读
- c - 为什么这段代码不需要更清晰的 feof?
- javascript - Asp.net core mvc 查看附件
- javascript - 通过 javascript 修改的 href 重定向到旧的 href
- python - Python Dataframe 删除存储在浮点列表中的不需要的字符
- java - 如何使用 EntityGraph 获取多个列表
- javascript - 如何在画布上渲染图像
- ios - 如何最好地传递数据以在 swiftui 中进行表单编辑(同时让该数据可用于父视图和其他子视图)?
- android - 如何使用命令行工具安装所有 Android SDK 许可证?
- javascript - 调用 React Setstate 回调但渲染延迟