2013-04-18 52 views
0

我有一个IP地址,像这样:IP地址为二进制用C

address = '192.168.1.11'; 

,并需要将其转换成其二进制格式

11000000 10101000 00000001 00001011 

我对如何leftshift小数的一些想法数量和使用inet_addr,但不知道我会如何去做。

谢谢,我还是新来C.

+0

你想打印的二进制字符串,或者只是有可用的4个数字分别?困难的部分是将一个8位数字转换为一串二进制数字;标准C中没有简单的功能来做AFAIK。 – 2013-04-18 02:26:40

+1

@JonathanLeffler我怀疑OP实际上只是想将它转换为本地整数类型,而不是“二进制格式”。大多数人对表示的概念感到困惑。 – 2013-04-18 02:31:22

+0

你不想解析“通过”'。'; '。'告诉你什么时候你到了一个数字的末尾。如果您要发布一些代码,您可以获得更好的帮助,以便人们可以看到您遇到问题的位置。 – 2013-04-18 02:40:52

回答

2

有一个专门用于将文本IP转换为32位“longip”地址的套接字函数,但在这种情况下这可能是不必要的。一个简单的形式是使用sscanf()解析它:

char ip[] = "192.168.1.11"; 
int n1, n2, n3, n4; 
sscanf(ip, "%d.%d.%d.%d", &n1, &n2, &n3, &n4). 

// Result: 

// n1 = 192 
// n2 = 168 
// n3 = 1 
// n4 = 11 
4

可以使用inet_addr(3)函数将字符串转换为in_addr_t,然后将其转换成二进制。没有标准库函数可以将数字转换为二进制,但使用按位逻辑运算符可以非常简单。

+0

我已经看过整个文档,但不知道如何将in_addr_t转换为二进制文件?感谢您的建议。 – 2013-04-18 02:30:31

+0

'inet_addr'以网络字节顺序将字符串转换为32位int,但没有迹象表明OP需要这样做,并且很难以机器(endian)独立的方式使用它。 – 2013-04-18 02:36:25