编程题:IPv4解析
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行格式无效,按规格要求输出。
答案:若无答案欢迎评论
前驱习题:字节序。
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行格式无效,按规格要求输出。
答案:若无答案欢迎评论