MAC地址在18字节及6字节之间的转换
来源:互联网 发布:淘宝新店会有人买吗 编辑:程序博客网 时间:2024/06/05 03:37
MAC进行字节转换
#define unsigned int u32#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"#define MACSTOL(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]#define MACLTOS(a) (u32 *)&(a)[0], (u32 *)&(a)[1], (u32 *)&(a)[2], (u32 *)&(a)[3], (u32 *)&(a)[4], (u32 *)&(a)[5] int main(int argc,char argv[]){ u8 mac_add[18] = "00:12:32:4a:56:7b"; u8 mac_add_tmp[6] = {0}; u8 mac_add_test[18] = {0}; /*用sscanf将18字节转为6字节,有的编译器可以不用(u32 *)进行强转*/ sscanf(mac_add, MACSTR, MACLTOS(mac_add_tmp)); /*6字节转为18字节*/ snprintf(mac_add_test, 18, MACSTR, MACSTOL(mac_add)); printf("original : %s new : %s\n", mac_add, mac_add_test); return 0;}
感觉这样还是有些问题:
6字节为 u8类型,进行强转之后内存会有变化,可能结果正确但是相同的 18字节MAC转换完成之后用memcmp比较会提示不同;
然后我用搞了下面这个方法;
#define MACLTOS(a) &(a)[0],&(a)[1], &(a)[2],&(a)[3],&(a)[4], &(a)[5] static void mac_to_net(u32* a, u8* b){ u32 i = 0; for(i = 0; i < 6; i++) { b[i] = (u8)a[i]; }} u32 mac_add_tmp_b[6] = {0};sscanf(mac_add, MACSTR, MACLTOS(mac_add_tmp_b)); //先转为u32mac_to_net(mac_add_tmp_b,mac_add_tmp);
0 0
- MAC地址在18字节及6字节之间的转换
- mac地址转换为字节
- mac地址转换为6字节数组--strtoul函数
- C#通过编码在字符和字节之间的转换
- 将17字节mac字符串转换为6字节mac
- unicode编码宽字节与单字节之间的转换
- 字节序,地址转换
- 字符串,字节数组,流之间的转换
- 字节组和整形之间的转换
- python3 字符串和字节之间的转换
- 字符串与字节之间的转换
- 图片和字节之间的互相转换
- 字符串和字节数组之间的转换
- 资源与字节流之间的转换
- 图像与原始字节之间的转换
- 动态字节数组的转换 Tbytes String、ANSIString及TBytes之间的转换
- 大端字节和小端字节的判断及转换
- linux IP地址转换及网络字节序
- Skyshop Image-Based Lighting Tools的介绍与基本操作
- C/C++:Sizeof与Strlen的区别与联系
- 从helloworld.c到a.out(3)词法分析
- 黑马程序员--string和stringBuffe和stringBuilder
- MyEclipse中 java.lang.StackOverflowError(堆栈溢出)的解决办法
- MAC地址在18字节及6字节之间的转换
- Java中堆与栈的区别
- Redis的5中数据类型以及常见操作
- 【转载,感悟】我对什么都感兴趣,可我迷茫了
- 使用 HttpClient 和 HtmlParser 实现简易爬虫
- Android学习笔记
- 动态链接库和静态链接库
- ios开发第一弹--概述
- Hello world ——1