c语言mac地址字符串转换成数组,CString类型的MAC地址转换为数组类型
在最近完成计算机网络课程设计的过程中,您需要将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地址转换为数组类型相关推荐
- IP地址字符串转换成16进制例程
写程序的时候经常遇到一个输入IP地址的情况,例如输入192.168.1.123,需要转换成对应的十六进制c0 a8 01 7b,所以就自己写了一个小demo,原理也很简单,就是检测输入的字符串中的&q ...
- java怎么把字符串转换成字符数组
此博客用于个人编程学习记录. 文章内容来自于: java怎么把字符串转换成字符数组-Java基础-PHP中文网https://www.php.cn/java/base/435415.html java ...
- C语言基础:时间转换成字符串 strftime的代码
将内容过程中经常用的一些内容段做个记录,下边内容段是关于C语言基础:时间转换成字符串 strftime的内容,希望能对大伙有一些用处. #include <stdio.h> #includ ...
- php 将一个字符串转换成数组,PHP将一个字符串转换成数组
PHP将一个字符串转换成数组,支持中文/** * 将一个字符串转换成数组,支持中文 * @param string $string 待转换成数组的字符串 * @return string 转换后的数组 ...
- 把数组里的字符串转换成数字或者把数字转换成字符串
把数组里的字符串转换成数字或者把数字转换成字符串 场景 例:如以下接口返回的'1,2,3' 前端需要转成数组 处理完的数组里面的每一项值都变成的字符串,而我想要的是[1,2,3] 于是就找到了下面的方 ...
- 数组里的字符串转换成数字或者把数字转换成字符串
数组里的字符串转换成数字或者把数字转换成字符串 var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; arr1.map(String); //结果: ['1', '2', ' ...
- asp.net(c#)字符串转换成字符数组 字符串转换成int 数组
问题: 一个字符串是string a="a,b,c,d" ,另一个是string b="1,2,3,4" ,第一个转换成string[]类型的,第二个转 ...
- asp.net(c#)如何把字符串转换成数组
数据库中记录保存格式是"a,b,c,d",现准备分别取出各值,如果直接取出做数组是不行的,必须进行转换,本文分2种情况,一种是该字符串转换成字符string[]类数组,一种是字符串 ...
- php把字符串变为数组_php怎么把字符串转换成数组?
php怎么把字符串转换成数组?下面本篇文章给大家介绍一下PHP把字符串转换成数组的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. PHP中,将一个字符串转成数组,是使用非常频繁 ...
最新文章
- python之父去面试-面试题_个人文章 - SegmentFault 思否
- Oracle-等待事件解读
- stm32 PWM输出学习
- 计算机在线采集数据注意,全站仪数据采集和传输中的常见问题解决方案
- Swift之深入解析枚举enum的底层原理
- properties 特有的方法
- 威盾PHP加密专家解密
- vagrant配置虚拟机网卡
- C#反射Assembly 详细说明
- 自定义微信小程序弹框
- java版Spring Cloud、spring boot 社交电子商务平台 电商源码
- matlab求解一元函数积分,matlab实现一元函数积分
- jpg、png、jpeg区别与压缩等知识总结 —— 性能优化篇
- MySQL数据导出:ERROR 1 (HY000) 错误解决
- R平方值python实现
- 大促迷思:那个榨干我钱包的“猜你喜欢”是什么来头!?
- 《缠中说禅108课》76:逗庄家玩的一些杂史 2
- Arduino初初教程7——模拟量采集
- qt matlab环境配置文件,Qt与matlab混合编程
- 超简单:快速制作一款高逼格词云图