在最近完成计算机网络课程设计的过程中,您需要将mac地址转换为六个字节. 我在互联网上找到了信息. 基本思想是将mac地址分为六个部分,每个部分为十六个. 基数将转换为十进制数,并分配给六字节数组的每一位. 后来,当查看库函数时,我发现了strtoul函数,并发现该函数可用于实现此函数. 实现功能如下:

int mac_str_to_bin( char *str, unsigned char *mac)

{

int i;

char *s, *e=NULL;

if ((mac == NULL) || (str == NULL)) {

return -1;

}

s = (char *) str;

for (i = 0; i < 6; ++i) {

mac[i] = s ? strtoul (s, &e, 16) : 0;

if (s)

s = (*e) ? e + 1 : e;

}

return 0;

}

测试步骤如下:

int main(void)

{

char *p = "11:22:33:44:55:66";

unsignedchar dst[6];

mac_str_to_bin(p,dst);

printf("mac:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",

dst[0], dst[1], dst[2], dst[3], dst[4], dst[5]);

return 0;

}

打印结果为:

mac:11:22:33:44:55:66

我将简要分析该功能的实现方式.

unsigned long int strtoul(const char *nptr, char **endptr, int base);

首先介绍strtoul函数. 它将以数字字符或符号字符开头,直到遇到非数字字符或字符串,停止读取,并读取base指定的数字字符串. 在基本模式下,nptr转换为长整数后,将指向停止时读取的位置,即在读取过程中遇到的非数字字符或字符串的位置. 这个地方也是endptr指针通过辅助指针来达到的目的.

在上面的实现函数中,主要实现是在for循环中. 第一句mac [i] = s? strtoul(s,&e,16): 0;首先确定s是否为空,如果前一个时间已到,如果整个mac解析完毕,则s将设置为空;如果s不为空,则表示mac地址解析尚未完成. 通过调用strtoul(),可以解析mac地址的一部分. 第二句是否(s)s =(* e)? E + 1: e;如果s不为空,则表示解析未完成,并且s当前为上一次解析过程中遇到的非数字字符或字符串的地址. 即,分隔符冒号': '的位置,此语句为删除该结肠.

实际上,在linux源代码中,实现此目标时也使用了本文开头提出的想法

此功能的Linux源代码如下:

unsigned long long int strtoul(const char *ptr, char **end, int base)

{

unsigned long long ret = 0;

if (base > 36)

goto out;

while (*ptr) {

int digit;

if (*ptr >= '0' && *ptr <= '9' && *ptr < '0' + base)

digit = *ptr - '0';

else if (*ptr >= 'A' && *ptr < 'A' + base - 10)

digit = *ptr - 'A' + 10;

else if (*ptr >= 'a' && *ptr < 'a' + base - 10)

digit = *ptr - 'a' + 10;

else

break;

ret *= base;

ret += digit;

ptr++;

}

out:

if (end)

*end = (char *)ptr;

return ret;

}

上述方法解决了将MAC地址转换为数组的问题,但是我遇到了一个新问题,即在vs2015的mac地址输入框中获取的mac地址是CString类型cstring 数组 声明,但是上面的函数参数它是一个char *类型. 因此,您必须首先将CString类型的mac地址转换为char *类型. 因此,我查找了一些信息,发现了一个更好的功能. 代码如下:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-149690-1.html

c语言mac地址字符串转换成数组,CString类型的MAC地址转换为数组类型相关推荐

  1. IP地址字符串转换成16进制例程

    写程序的时候经常遇到一个输入IP地址的情况,例如输入192.168.1.123,需要转换成对应的十六进制c0 a8 01 7b,所以就自己写了一个小demo,原理也很简单,就是检测输入的字符串中的&q ...

  2. java怎么把字符串转换成字符数组

    此博客用于个人编程学习记录. 文章内容来自于: java怎么把字符串转换成字符数组-Java基础-PHP中文网https://www.php.cn/java/base/435415.html java ...

  3. C语言基础:时间转换成字符串 strftime的代码

    将内容过程中经常用的一些内容段做个记录,下边内容段是关于C语言基础:时间转换成字符串 strftime的内容,希望能对大伙有一些用处. #include <stdio.h> #includ ...

  4. php 将一个字符串转换成数组,PHP将一个字符串转换成数组

    PHP将一个字符串转换成数组,支持中文/** * 将一个字符串转换成数组,支持中文 * @param string $string 待转换成数组的字符串 * @return string 转换后的数组 ...

  5. 把数组里的字符串转换成数字或者把数字转换成字符串

    把数组里的字符串转换成数字或者把数字转换成字符串 场景 例:如以下接口返回的'1,2,3' 前端需要转成数组 处理完的数组里面的每一项值都变成的字符串,而我想要的是[1,2,3] 于是就找到了下面的方 ...

  6. 数组里的字符串转换成数字或者把数字转换成字符串

    数组里的字符串转换成数字或者把数字转换成字符串 var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr1.map(String); //结果: ['1', '2', ' ...

  7. asp.net(c#)字符串转换成字符数组 字符串转换成int 数组

    问题: 一个字符串是string   a="a,b,c,d" ,另一个是string   b="1,2,3,4" ,第一个转换成string[]类型的,第二个转 ...

  8. asp.net(c#)如何把字符串转换成数组

    数据库中记录保存格式是"a,b,c,d",现准备分别取出各值,如果直接取出做数组是不行的,必须进行转换,本文分2种情况,一种是该字符串转换成字符string[]类数组,一种是字符串 ...

  9. php把字符串变为数组_php怎么把字符串转换成数组?

    php怎么把字符串转换成数组?下面本篇文章给大家介绍一下PHP把字符串转换成数组的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. PHP中,将一个字符串转成数组,是使用非常频繁 ...

最新文章

  1. python之父去面试-面试题_个人文章 - SegmentFault 思否
  2. Oracle-等待事件解读
  3. stm32 PWM输出学习
  4. 计算机在线采集数据注意,全站仪数据采集和传输中的常见问题解决方案
  5. Swift之深入解析枚举enum的底层原理
  6. properties 特有的方法
  7. 威盾PHP加密专家解密
  8. vagrant配置虚拟机网卡
  9. C#反射Assembly 详细说明
  10. 自定义微信小程序弹框
  11. java版Spring Cloud、spring boot 社交电子商务平台 电商源码
  12. matlab求解一元函数积分,matlab实现一元函数积分
  13. jpg、png、jpeg区别与压缩等知识总结 —— 性能优化篇
  14. MySQL数据导出:ERROR 1 (HY000) 错误解决
  15. R平方值python实现
  16. 大促迷思:那个榨干我钱包的“猜你喜欢”是什么来头!?
  17. 《缠中说禅108课》76:逗庄家玩的一些杂史 2
  18. Arduino初初教程7——模拟量采集
  19. qt matlab环境配置文件,Qt与matlab混合编程
  20. 超简单:快速制作一款高逼格词云图

热门文章

  1. 建筑八大员培训武汉材料员培训建筑施工中的材料验收实践分析
  2. springboot项目Autowired annotation is not supported on static fields
  3. C语言实现数据结构顺序线性表
  4. MES项目导入-案例分析-XC-MES成就飞毛腿的高效与协同
  5. windows运行命令安全隐患
  6. CPU 运行时的硬件环境详解
  7. Ubuntu通过PPA下载指定版本软件
  8. 2022.8.20 科大讯飞秋招笔试
  9. 摩尔定律终结:“偏执狂”英特尔缘何不再偏执?
  10. 自定义combobox控件(拼音过滤)