我要计算以下内容的广播地址:
IP: 192.168.3.1
Subnet: 255.255.255.0
= 192.168.3.255
在C中。
我知道方法(在倒置的IP和子网之间进行奇特的逐位OR),但我的问题是我来自MacOSX Cocoa编程的绿地。
我查看了ipcal的源代码,但无法将其集成到我的代码库中。在互联网上的某个地方肯定只有十行代码,我就是找不到。有没有人可以给我举一个简短的代码例子,告诉我如何用C语言来做这件事?
发布于 2009-04-22 14:55:32
只要计算一下:
broadcast = ip | ( ~ subnet )
(广播=ip地址或反转的子网掩码)
广播地址具有1
位,而子网掩码具有0
位。
发布于 2013-07-17 12:35:53
据我所知,OP至少对位级算术有模糊的理解,但在将字符串转换为数字及其倒数时迷失了方向。下面是一个使用froh42的计算的工作示例(无论如何只需进行最少的测试)。
jcomeau@aspire:~/rentacoder/jcomeau/freifunk$ cat inet.c; make inet; ./inet 192.168.3.1 255.255.255.0
#include <arpa/inet.h>
#include <stdio.h>
int main(int argc, char **argv) {
char *host_ip = argc > 1 ? argv[1] : "127.0.0.1";
char *netmask = argc > 2 ? argv[2] : "255.255.255.255";
struct in_addr host, mask, broadcast;
char broadcast_address[INET_ADDRSTRLEN];
if (inet_pton(AF_INET, host_ip, &host) == 1 &&
inet_pton(AF_INET, netmask, &mask) == 1)
broadcast.s_addr = host.s_addr | ~mask.s_addr;
else {
fprintf(stderr, "Failed converting strings to numbers\n");
return 1;
}
if (inet_ntop(AF_INET, &broadcast, broadcast_address, INET_ADDRSTRLEN) != NULL)
printf("Broadcast address of %s with netmask %s is %s\n",
host_ip, netmask, broadcast_address);
else {
fprintf(stderr, "Failed converting number to string\n");
return 1;
}
return 0;
}
cc inet.c -o inet
Broadcast address of 192.168.3.1 with netmask 255.255.255.0 is 192.168.3.255
发布于 2009-04-22 14:59:26
会是这样吗?
unsigned broadcast(unsigned ip,unsigned subnet){
unsigned int bits = subnet ^ 0xffffffff;
unsigned int bcast = ip | bits;
return bcast;
}
编辑:我认为ip和子网都没有“。
https://stackoverflow.com/questions/777617
复制相似问题