编写IP格式化输出函数

最近的MDVR界面开发中,其中的一个网络界面要写一个IP地址转换的函数,如将“192.168.1.1”,转换为“192.168.001.001”,以下函数的功能实现IP地址的格式化输出。

static int IPConvert(char *str)
{
      long ipaddr = inet_addr(str);
      return sprintf(str, "%03d.%03d.%03d.%03d", (ipaddr >> 0) & 0xFF, (ipaddr >> 8) & 0xFF, (ipaddr >> 16) & 0xFF, (ipaddr >> 24) & 0xFF);
}

1)inet_addr 函数:

头文件:在linux系统下,可用man inet_addr 查看:

#include <sys/socket.h>
             #include <netinet/in.h>
             #include <arpa/inet.h>

功能:将一个字符串型的点分十进制的IP转换成一个长整数型数(u_long类型)

2)sprintf 函数:

头文件:#include <stdio.h>

功能:把格式化的数据写入某个字符串。

注:“%03d”表示输出数字宽度为3,不足的左边补0;

"%03d.%03d.%03d.%03d",从右向左的填充。

输出结果:

“192.168.1.1”的整数形式为:16885952

整数16885952转化成字符串IP地址,并格式化输出:192.168.001.001

       整数 ——> IP:

  • 将整数值进行右移位操作(>>),右移0位,再进行与操作符(&)0xFF,得到的数字即为第四段IP。
  • 将整数值进行右移位操作(>>),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。
  • 将整数值进行右移位操作(>>),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。
  • 将整数值进行右移位操作(>>),右移24位,与操作符(&)0xFF,得到的数字即为第一段IP。
  • 0xFF是一个十六进制数,二进制表示为11111111.

编写IP格式化输出函数,布布扣,bubuko.com

时间: 2024-10-12 22:29:44

编写IP格式化输出函数的相关文章

初学Python之利用map编写姓名格式化输出函数

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.例如输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']. 代码: #定义一个list L = [] #设置名字的个数 n = int(raw_input("Please enter the number of the name:")) #利用循环将名字追加到list里面 for num in range(n):     names = raw

C语言格式化输出函数及使用禁区

编译环境: Debian: 7.6 gcc: 4.7.2 一.格式化输出函数 C语言中设计到的标准格式化输出函数如下: #include <stdio.h> int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t s

python编写IP地址与十进制IP转换脚本

IP地址与十进制IP转换 #!/usr/bin/env python #encoding=utf-8 import re import sys import os def ten_to_two(ten_num): two_str = '' while ten_num != 1: a = ten_num % 2 two_str = two_str + str(a) ten_num = ten_num / 2 else: two_str = two_str + str(1) two_str = tw

c++ 格式化输出函数详解

iomanip是I/O流控制头文件,就像C里面的格式化输出一样.以下是一些常的: dec 置基数为10 相当于"%d" hex 置基数为16 相当于"%X" oct 置基数为8 相当于"%o" setfill(c) 设填充字符为c setprecision(n)   设显示小数精度为n位 setw(n) 设域宽为n个字符 setioflags(ios::fixed)   固定的浮点显示 setioflags(ios::scientific) 指数

c++ cout格式化输出函数详解

这篇文章主要讲解如何在C++中使用cout进行高级的格式化输出操作,包括数字的各种计数法(精度)输出,左或右对齐,大小写等等.通过本文,您可以完全脱离scanf/printf,仅使用cout来完成一切需要的格式化输入输出功能(从非性能的角度而言).更进一步而言,您还可以在<sstream>.<fstream>上使用这些格式化操作,从而代替sprintf和fprintf函数.为方便描述,下文仅以cout为例进行介绍. 一.综述 cout是STL库提供的一个iostream实例,拥有i

Python基础之格式化输出函数format()功能详解

之前发过一篇文章:Python基础之常用格式化输出字符详解 但是呢,有时候我们需要用到多个%的时候,用这个就很不方便了,比如数错%数量或者一 一对应的时候... 这里补充一个字典方式的格式化输出字符的办法 print("double abc is %(a)s%(b)s%(c)s"%{'a':'aa','b':'bb','c':'cc'}) 这种方法呢,最大一个好处是字典格式可以和 json 文件互相转换,相当方便! format() 今天呢,在这里在给大家介绍一个比较先进的方法:for

自定义编写js格式化数字的函数

在处理网页的时候,有时候会需要显示很长的数字,但是当数字的长度比较长的时候,就很难看一个数字到底是多大.这种情况下,一些网站在处理数字的时候,当数字的长度大于3个时,就用逗号把他们分开,这是一个比较常见的方式.但是我查了一下网页上将数字用逗号分开的方法,没有找到比较满意的.于是自己写一一个,在这里分享出来: 处理目标:将超过三位的时,使用逗号将数字分隔开来 1 //////// 格式化数字,个三个数字加一个逗号 2 function geshihua(onum) { 3 ////空字符这返回原来

Delphi格式化输出函数(1): Format

vars: string;begin//指令类型 types := Format('最大整数是: %d; 最小整数是: %d',[MaxInt,Low(Integer)]);//返回: 最大整数是: 2147483647; 最小整数是: -2147483648{ 提示: 格式指令必须以 % 开始, 不区分大小写, %d 代表一个整数; 第二个参数是一个 变体数组 }s := Format('最大的无负号整数是: %u',[High(Cardinal)]);//返回: 最大的无负号整数是: 429

WinAPI: wvsprintf 与 wsprintf - Windows 的格式化输出函数(转)

wvsprintf 函数声明: wvsprintf(   Output: PChar;  {用于返回的缓冲区}   Format: PChar;  {格式; 类似与 Format 的格式, 应该是和 C 语言的 printf 的格式相同}   arglist: va_list {数组指针} ): Integer;        {返回到缓冲区的实际字符串的长度} wvsprintf 函数举例: //例一: var   buf: PChar;   arr: array[0..1] of Point