-->
当前位置:首页 > 题库 > 正文内容

编程题:IPv4解析

Luz3年前 (2022-04-04)题库759
IPv4

前驱习题:字节序。

IPv4地址在机器内部用**32位无符号数**保存。为便于交流,人们通常用“点分十进制”书写IPv4地址:

- 32位无符号数**从高位到低位**分为4个字节:B3 B2 B1 B0,左边高位、右边低位。
- **由低字节到高字节**依次写出其十进制数值,每段最长3位数字,范围是[0, 256)。
- 各段之间用小数点.分隔,格式类似B0.B1.B2.B3。
- 这里反转的原因是网络相关参数通常使用**大端序big-endian**,而我们的电脑使用**小端序little-endian**。

现在需要读入字符串形式的IPv4地址并转换成机内形式。代码框架如下:

cpp
#include <cstdint> // 声明uint32_t
#include <iomanip>
#include <iostream>
using namespace std;

bool parse_ipv4(const string &s, uint32_t& ip){
return false; // 修改本函数,成功返回true,否则返回false。
}

int main(){
for(string s; getline(cin, s);){
uint32_t ip = 0;
if(parse_ipv4(s, ip)){
cout << ip << endl;
}else{
cout << "invalid ipv4 address: \"" << s << '"' << endl;
}
}
}


#### 输入规格

每行一个字符串,整行读入并处理,直到EOF为止。

#### 输出规格

每行一条处理结果。如果输入的IPv4地址串:

- 格式有效,输出其**数值(非负)**。
- 格式无效,输出invalid ipv4 address: "<ip>",其中<ip>为实际读到的字符串(原样输出)。

#### 样例输入

in
127.0.0.1
1.2.3.4
hello, world


#### 样例输出

out
16777343
67305985
invalid ipv4 address: "hello, world"


#### 样例解释

- 第1行格式有效,127在最低字节,1在最高字节,中间两字节为空。
- 第2行格式有效,uint32_t从低到高的4个字节值分别为1、2、3、4,使用位运算或乘法可计算。
- 第3行格式无效,按规格要求输出。





答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。