从字符串中提取网络适配器的Mac地址(char* 转hex)

本文介绍如何从字符串形式的MAC地址中,通过转化操作获取网络适配器的全球唯一48位十六进制地址。内容涉及MAC地址的特性及其在计算机硬件中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络适配器的MAC地址为全球唯一的6字节(48位)地址,标识一台计算机地址(一台计算机可以装多个网络适配器,因此可以有多个MAC地址),是固化在适配的ROM中的地址。

将char数组类型(字符串型)的MAC转化为十六进制:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define uint unsigned int 
#define uchar unsigned char

#define MAC_ADDRESS_LEN 6		/* mac地址长为6位十六进制数*/

typedef enum tagMac_Format
{
	MAC_FORMAT_2PART = 0,
	MAC_FORMAT_3PART,
	MAC_FORMAT_6PART_1,
	MAC_FORMAT_6PART_2,
	MAC_FORMAT_ANY,
	MAC_FORMAT_BUTT
}Mac_Format;

typedef struct strParseInfo
{
	char *szFmt;
	uint uiLen;
}STR_PARSE_INFO_S;

/* Mac 地址以字符串呈现的四种不同方式 */
STR_PARSE_INFO_S g_astMacInfo[MAC_FORMAT_BUTT]=	
{
	{"%c%c%c%c%c%c-%c%c%c%c%c%c",13},
	{"%c%c%c%c-%c%c%c%c-%c%c%c%c",14},
	{"%c%c-%c%c-%c%c-%c%c-%c%c-%c%c",17},
	{"%c%c:%c%c:%c%c:%c%c:%c%c:%c%c",17},
	{"",0}
};
bool str_2_hex(char *szData,uchar *pucHex)
{
	uint uiLen = 0;
	uint i=0;
	char szByte[3]={0};
	char *pcEndptr = NULL;
	
	/* 参数检查 */
	if ((NULL == szData) || (NULL == pucHex))
OpenHarmony Arkts是一个开源的操作系统内核和服务框架,用于构建安全、高效、易移植的物联网设备和应用平台。在OpenHarmony中,获取MAC地址通常是在网络设备驱动程序或者相关的网络服务模块中完成的。 如果你想通过API在Arkts环境中获取MAC地址,可以参考`netlink`或`network`的相关接口,它们可能会提供函数来查询本地网络适配器的物理地址。具体的步骤可能会涉及到底层的网络操作,例如检查网卡信息或者读取sysfs目录下的相关文件。 以下是简化的示例代码片段,假设有一个名为`NetUtils`的类: ```java import android.net.wifi.WifiManager; import android.os.SystemProperties; public class NetUtils { public static String getMacAddress() { try { // 从硬件直接读取MAC地址 byte[] macBytes = getHardwareMac(); if (macBytes != null) { return bytesToHex(macBytes); } // 如果硬件没提供,尝试从Android系统属性中获取 String macString = SystemProperties.get("ro.product.board.mac"); if (!macString.isEmpty()) { return macString; } // 或者尝试获取Wi-Fi接口的MAC地址 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); NetworkInfo networkInfo = wifiManager.getConnectionInfo(); if (networkInfo != null && networkInfo.getMacAddress() != null) { return networkInfo.getMacAddress(); } } catch (Exception e) { e.printStackTrace(); } // 返回空字符串表示无法获取MAC地址 return ""; } private static byte[] getHardwareMac() { // 这里需要实现具体的操作,可能需要JNI或者JNI本地库来访问硬件数据 // ... (未提供具体代码) } private static String bytesToHex(byte[] bytes) { StringBuilder result = new StringBuilder(); for (byte b : bytes) { int n = b & 0xff; result.append(HEX_DIGITS[n >>> 4]); result.append(HEX_DIGITS[n & 0x0f]); } return result.toString().toUpperCase(); } // HEX_DIGITS常量表示16进制数字的映射表 private static final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值