如果我要打印数据,为了得到正确的值,我需要将其转换为主机字节序,对吗?
我的问题是我正在尝试打印由htonl返回的数据值。以下是我的示例:
#include <stdio.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
int bits = 12;
char *ip = "132.89.39.0";
struct in_addr addr;
uint32_t network, netmask, last_addr;
uint32_t total_hosts;
inet_aton(ip, &addr);
printf("Starting IP:\t%s\n", inet_ntoa(addr.s_addr));
netmask = (0xFFFFFFFFUL << (32 - bits)) & 0xFFFFFFFFUL;
netmask = htonl(netmask);
printf("Netmask:\t%s\n", inet_ntoa(netmask));
network = addr.s_addr & netmask;
printf("Network:\t%s\n", inet_ntoa(network));
printf("Total Hosts:\t%d\n", ntohl(netmask));
return 0;
printf("Total Hosts:\t%d\n", ntohl(netmask));
会打印出正确的值,但是会带有负号。如果我使用%u
,则会得到错误的值。
我哪里做错了?
使用%d输出的结果为:
Starting IP: 132.89.39.0
Netmask: 255.240.0.0
Network: 132.80.0.0
Total Hosts: -1048576
当使用%u输出时:
Starting IP: 132.89.39.0
Netmask: 255.240.0.0
Network: 132.80.0.0
Total Hosts: 4293918720
我已经被这个问题困扰了两天。看起来很简单的东西却完全让我失去方向。我不想让任何人解决这个问题,但是正确的指导将非常有帮助。
%u
打印,我会得到完全不同的值。我已经编辑了我的代码,因为引起问题的那一行应该是printf("Total Hosts:\t%u\n", ntohl(netmask));
。 - Torrainet_ntoa()
函数不是只需要一个struct in_addr
参数吗? - Sourav Ghosh