C++中MAC地址与字符数组的相互转换详解

news/2024/11/7 22:42:21/

目录

  • 引言:
  • MAC地址与字符数组的定义
    • MAC地址转换为字符数组
    • 字符数组转换为MAC地址
  • 总结

引言:

在网络编程中,MAC地址是一个重要的标识符。有时候我们需要在C++程序中进行MAC地址与字符数组之间的转换。本篇博文将详细介绍如何在C++中实现MAC地址与字符数组之间的相互转换,并提供相应的代码实例,帮助初学者快速入门。

MAC地址与字符数组的定义

在C++中,可以使用字符数组来表示MAC地址。MAC地址通常由6个字节组成,每个字节可以用一个十六进制数表示。字符数组则是由字符组成的一维数组。

MAC地址转换为字符数组

下面是将MAC地址转换为字符数组的代码示例:


#include <iostream>
#include <iomanip>void macToCharArray(const unsigned char* macAddress, char* charArray) {sprintf(charArray, "%02X:%02X:%02X:%02X:%02X:%02X",macAddress[0], macAddress[1], macAddress[2],macAddress[3], macAddress[4], macAddress[5]);
}int main() {unsigned char macAddress[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};char charArray[18];macToCharArray(macAddress, charArray);std::cout << "MAC Address (as char array): " << charArray << std::endl;return 0;
}

上述代码中,macToCharArray函数将MAC地址以十六进制格式写入字符数组charArray中。使用sprintf函数将每个字节的十六进制值转换为对应的字符,并通过%02X格式化控制符确保每个字节都是两位十六进制数。
如果是char 数组该怎么办呢?

char aMacAddress[18]; sprintf(aMacAddress, "%02X:%02X:%02X:%02X:%02X:%02X",static_cast<unsigned char>(pRecvBuf[0]),static_cast<unsigned char>(pRecvBuf[1]),static_cast<unsigned char>(pRecvBuf[2]),static_cast<unsigned char>(pRecvBuf[3]),static_cast<unsigned char>(pRecvBuf[4]),static_cast<unsigned char>(pRecvBuf[5]));std::cout << "MAC Address: " << aMacAddress << std::endl;std::string sMacAddress(aMacAddress);//转化为string

字符数组转换为MAC地址

下面是将字符数组转换为MAC地址的代码示例:

#include <iostream>
#include <sstream>void charArrayToMac(const char* charArray, unsigned char* macAddress) {std::istringstream iss(charArray);int value;for (int i = 0; i < 6; i++) {iss >> std::hex >> value;macAddress[i] = static_cast<unsigned char>(value);iss.ignore(1, ':');}
}int main() {char charArray[] = "00:11:22:33:44:55";unsigned char macAddress[6];charArrayToMac(charArray, macAddress);std::cout << "MAC Address: ";for (int i = 0; i < 6; i++) {std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(macAddress[i]);if (i < 5)std::cout << ":";}std::cout << std::endl;return 0;
}

上述代码中,charArrayToMac函数通过std::istringstream将字符数组解析为十六进制值,并将其存储在macAddress数组中。使用>>运算符和std::hex格式化控制符从字符数组中读取每个字节的十六进制值。iss.ignore(1, ‘:’)用于跳过冒号分隔符。
如果使用qt该怎么办呢?

	QString sMacAddress=""//假设是mac地址sMacAddress.remove(':');for (int i = 0; i < 6; ++i) {QString sByteString = sMacAddress.mid(i * 2, 2);bool bIsOk;int nValue = sByteString.toInt(&bIsOk, 16);if (bIsOk) {m_aBuffer[i] = static_cast<char>(nValue);}else {QMessageBox::critical(this, "错误", "mac设置错误");return;}}for (int i = 0; i < 6; ++i) {qDebug() << QString::number(static_cast<unsigned char>(m_aBuffer[8+i]), 16).rightJustified(2, '0');}

总结

本文详细介绍了在C++中实现MAC地址与字符数组之间的相互转换。以及在服务端和qt如何设置mac


http://www.ppmy.cn/news/67971.html

相关文章

uniapp - 微信小程序接入腾讯视频播放器功能插件,uniapp开发微信小程序端调用引入并使用腾讯视频播放组件完整全流程(详细示例源码,一键复制开箱即用)

效果图 在uniapp 微信小程序项目中,集成腾讯视频功能插件,实现播放腾讯视频效果,附带详细示例源码及注释, 你可以跟着步骤一步步来,保证几分钟就能快速在uniapp小程序项目中植入腾讯视频功能! 一、开通插件 首先使用腾讯视频的话

业务技术 | 线上单表数据量超过1亿,如何做分表迁移

问&#xff1a;在一个业务系统有一张表&#xff0c;里面的数据已经过亿了&#xff0c;使得在业务查询的过程中就越来越慢&#xff0c;如何进行优化&#xff1f; 首先说一下分表方案的基本思路。在分表之前&#xff0c;需要对我们原有的表做一个数据观察&#xff08;或者说数据…

yolov5检测小目标(附源码)

yolov5小目标检测&#xff08;图像切割法附源码&#xff09; 6.30 更新切割后的小图片的label数据处理 前言 yolov5大家都熟悉&#xff0c;通用性很强&#xff0c;但针对一些小目标检测的效果很差。 YOLOv5算法在训练模型的过程中&#xff0c;默认设置的图片大小为640x640像…

解密网站401错误:了解发生原因和修复方法

​  每个网站都会有不同的错误码&#xff0c;其中&#xff0c;401错误被认为是相对常见的错误码。那么&#xff0c;什么是网站401错误呢?在摸清了这一点之后&#xff0c;我们也需要学习一下如何解决它。 什么是 401 状态码? 401 状态代码是 Web 服务器发送给浏览器的 HTTP …

种棉12载的他,为何最终选择千耘导航?

边休息边种地&#xff0c;每天还能提升近四十亩作业量&#xff0c;是怎么做到的&#xff1f; 种地十二三年&#xff0c;为何最终选择了千耘农机导航&#xff1f; 千耘导航使用前后的工作状态究竟相差了多少&#xff1f; 让我们走进新疆阿克苏&#xff0c;听一听任师傅的“种…

CTFshow pwn03

题目&#xff1a; 在做本道题前&#xff0c;我们先了解所必要的知识 Libc是什么&#xff1f; 英文名字&#xff1a;Standard C library&#xff0c;其翻译过来&#xff0c;C语言标准库 它是符合ANSI C标准的一个函数库 学过C语言会明白 ANSI C标准又是什么&#xff1f; 198…

linux常见指令以及权限理解

1.linux下基本指令&#xff1a; ls指令&#xff1a; 查看文件的属性 ls-l&#xff1a;文件的属性 ls-la:显示所有文件的属性 ls *&#xff1a; linux任何一个目录下面都有两个隐藏文件&#xff1a; ..&#xff1a;表示当前路径的上级路径&#xff0c;可以原路返回 .&…

Red Hat Enterprise Linux (RHEL) 9.2 (x86_64, aarch64) - 红帽企业 Linux 9.2 发布

Red Hat Enterprise Linux (RHEL) 9.2 (x86_64, aarch64) 红帽企业 Linux 9.2 请访问原文链接&#xff1a;https://sysin.org/blog/rhel-9/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 红帽企业 Linux 9 红帽企业 Linux 9.…