如何将IP地址转换为十进制数值表示?

2026-05-22 14:221阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1129个文字,预计阅读时间需要5分钟。

如何将IP地址转换为十进制数值表示?

需求+这两天需要查看内存对齐的相关问题,因为产生了一个,如何将地址转换为十进制数?对于如下程序:void func(){ int a=10; printf(a的地址为:%p\n, &a);}通过格式控制符%p以及取地址操作符&来输出地址。

•需求

  这两天在看内存对齐的相关问题,因此产生了一个,如何将地址转换为十进制数?

  对于如下程序:

void func() { int a = 10; printf("a 的地址为:%p\n", &a); }

  通过格式控制符%p以及取地址符&a,可以很方便的输出变量 a 的地址。

  printf函数中对于 %p 一般以十六进制的方式输出指针的值:

  一般而言,十六进制对于分析各个变量间的内存空间位置没那么方便,此时往往需要将其转化为十进制。

  如何那么,该转换呢?

•十六进制地址转十进制 方法一

  复制输出控制台输出的十六进制代码,通过在线进制转换工具将其转化为十进制。

如何将IP地址转换为十进制数值表示?

  是不是简单粗暴,但是当要转化的地址多的时候,这个方法往往比较繁琐,那么还有没有其他方法呢?

方法二

  首先,编写一个十六进制转十进制的代码,下面做一下简单介绍。

  • 十进制:逢十进一,数字中含有 0,1,2,3,4,5,6,7,8,9
  • 十六进制:逢十六进一,表示形式比较特殊,0~9 正常用数字表示,10~15 用英文字母 A~F(或 a~f) 来表示
    • 10 用 A 表示
    • 11 用 B 表示
    • 12 用 C 表示
    • 13 用 D 表示
    • 14 用 E 表示
    • 15 用 F 表示

  在十六进制的表示中,大写字母小写字母都可以,一般有个 0x 前缀表示当前的数用十六进制表示。

  有了相关的知识储备,我们来看看十六进制如何转化为十进制,假设需要转换的十六进制数为 0XFA7B :

$\begin{aligned} 0XFA07B &= F\times 16^{4}+ A\times 16^{3} + 0\times 16^{2} + 7\times 16^{1} + B\times 16^{0} \\ &= 15\times 16^{4}+ 10\times 16^{3} + 0\times 16^{2} + 7\times 16^{1} + 11\times 16^{0} \\ &= 1024123\end{aligned} $

  是不是超级简单,那我们通过编程语言来实现一下:

int change(char c)//分解出每一位对应的数字 { if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; if (c >= '0' && c <= '9') return c - '0'; return 0;//如果是前缀的X,输出0,不影响最终答案 } int hexToDecimal(const string& str)//十六进制转十进制,十六进制保存在字符串中 { int len = str.length(); int x = 1; int ans = 0; for (int i = len - 1; i >= 0; i--)//从右往左依次处理每一位 { int num = change(str[i]); ans += num * x; x *= 16; } return ans; }

  这儿有一道进制转换的题目,有兴趣的小伙伴可以用来测试一下程序的正确性:华为机试|HJ5 进制转换。

  有了十六进制转十进制的方法,那么,如何将地址输出的十六进制代码转化为字符串呢?

  这样操作?

void func() { int a = 10; string str = & a; }

  显然不行,编译都不通过;

  这可如何是好?

  莫慌,我们可以曲线转换,下面介绍一下freopen函数用法。

freopen

函数简介

  freopen 是被包含于 C标准库头文件stdio.h 中的一个函数,用于重定向输入输出流。

  该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

函数原型

*FILE freopen( const char*_Filename, const char*_Mode, FILE _Stream );

  具体内容,请参考:

本文共计1129个文字,预计阅读时间需要5分钟。

如何将IP地址转换为十进制数值表示?

需求+这两天需要查看内存对齐的相关问题,因为产生了一个,如何将地址转换为十进制数?对于如下程序:void func(){ int a=10; printf(a的地址为:%p\n, &a);}通过格式控制符%p以及取地址操作符&来输出地址。

•需求

  这两天在看内存对齐的相关问题,因此产生了一个,如何将地址转换为十进制数?

  对于如下程序:

void func() { int a = 10; printf("a 的地址为:%p\n", &a); }

  通过格式控制符%p以及取地址符&a,可以很方便的输出变量 a 的地址。

  printf函数中对于 %p 一般以十六进制的方式输出指针的值:

  一般而言,十六进制对于分析各个变量间的内存空间位置没那么方便,此时往往需要将其转化为十进制。

  如何那么,该转换呢?

•十六进制地址转十进制 方法一

  复制输出控制台输出的十六进制代码,通过在线进制转换工具将其转化为十进制。

如何将IP地址转换为十进制数值表示?

  是不是简单粗暴,但是当要转化的地址多的时候,这个方法往往比较繁琐,那么还有没有其他方法呢?

方法二

  首先,编写一个十六进制转十进制的代码,下面做一下简单介绍。

  • 十进制:逢十进一,数字中含有 0,1,2,3,4,5,6,7,8,9
  • 十六进制:逢十六进一,表示形式比较特殊,0~9 正常用数字表示,10~15 用英文字母 A~F(或 a~f) 来表示
    • 10 用 A 表示
    • 11 用 B 表示
    • 12 用 C 表示
    • 13 用 D 表示
    • 14 用 E 表示
    • 15 用 F 表示

  在十六进制的表示中,大写字母小写字母都可以,一般有个 0x 前缀表示当前的数用十六进制表示。

  有了相关的知识储备,我们来看看十六进制如何转化为十进制,假设需要转换的十六进制数为 0XFA7B :

$\begin{aligned} 0XFA07B &= F\times 16^{4}+ A\times 16^{3} + 0\times 16^{2} + 7\times 16^{1} + B\times 16^{0} \\ &= 15\times 16^{4}+ 10\times 16^{3} + 0\times 16^{2} + 7\times 16^{1} + 11\times 16^{0} \\ &= 1024123\end{aligned} $

  是不是超级简单,那我们通过编程语言来实现一下:

int change(char c)//分解出每一位对应的数字 { if (c >= 'a' && c <= 'f') return c - 'a' + 10; if (c >= 'A' && c <= 'F') return c - 'A' + 10; if (c >= '0' && c <= '9') return c - '0'; return 0;//如果是前缀的X,输出0,不影响最终答案 } int hexToDecimal(const string& str)//十六进制转十进制,十六进制保存在字符串中 { int len = str.length(); int x = 1; int ans = 0; for (int i = len - 1; i >= 0; i--)//从右往左依次处理每一位 { int num = change(str[i]); ans += num * x; x *= 16; } return ans; }

  这儿有一道进制转换的题目,有兴趣的小伙伴可以用来测试一下程序的正确性:华为机试|HJ5 进制转换。

  有了十六进制转十进制的方法,那么,如何将地址输出的十六进制代码转化为字符串呢?

  这样操作?

void func() { int a = 10; string str = & a; }

  显然不行,编译都不通过;

  这可如何是好?

  莫慌,我们可以曲线转换,下面介绍一下freopen函数用法。

freopen

函数简介

  freopen 是被包含于 C标准库头文件stdio.h 中的一个函数,用于重定向输入输出流。

  该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

函数原型

*FILE freopen( const char*_Filename, const char*_Mode, FILE _Stream );

  具体内容,请参考: