把Mac地址字符串转换为占一个字节的十六进制数

把Mac地址字符串转换为占一个字节的十六进制数(用指针函数返回值)

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

unsigned char *getMac()
{
	char n[6][5];
       char mac[20]="80:32:C0:AF:55:AB";
       sscanf(mac,"%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]",n[0],n[1],n[2],n[3],n[4],n[5]);
   
	int i, j;
	int m[2];
	static unsigned char data[6]={0};  //需要定义成静态变量,避免随函数周期结束而收回达不到传递返回值的效果。静态变量定义后不会随着函数生命周期结束,而是进程生命周期结束而结束(相对于全局变量)
	for(i=0;i<6;i++)
	{
		for(j=0;j<2;j++)
		{
			if(n[i][j]=='0')
				m[j]=0;
			else if(n[i][j]=='1')
				m[j]=1;	
			else if(n[i][j]=='2')
				m[j]=2;	
			else if(n[i][j]=='3')
				m[j]=3;	
			else if(n[i][j]=='4')
				m[j]=4;	
			else if(n[i][j]=='5')
				m[j]=5;	
			else if(n[i][j]=='6')
				m[j]=6;	
			else if(n[i][j]=='7')
				m[j]=7;	
			else if(n[i][j]=='8')
				m[j]=8;	
			else if(n[i][j]=='9')
				m[j]=9;	
			else if((n[i][j]=='a') || (n[i][j]=='A'))
				m[j]=10;
			else if((n[i][j]=='b') || (n[i][j]=='B'))
				m[j]=11;
			else if((n[i][j]=='c') || (n[i][j]=='C'))
				m[j]=12;
			else if((n[i][j]=='d') || (n[i][j]=='D'))
				m[j]=13;
			else if((n[i][j]=='e') || (n[i][j]=='E'))
				m[j]=14;
			else if((n[i][j]=='f') || (n[i][j]=='F'))
				m[j]=15;
			
			printf("m[%d]=%d\n",j,m[j]);
		}
		data[i] = m[0]<<4 | m[1];
	}

  printf("0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n0x%x\n",data[0],data[1],data[2],data[3],data[4],data[5]);    return data; } int main() {    unsigned char *str = getMac();    printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",str[0],str[1],str[2],str[3],str[4],str[5]);    return 0; }

 

把Mac地址字符串转换为占一个字节的十六进制数(地址参)

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

void getMac(unsigned char *data)
{
	char n[6][2];
        char mac[20]="80:32:C0:AF:55:AB";
        sscanf(mac,"%[^:]:%[^:]:%[^:]:%[^:]:%[^:]:%[^:]",n[0],n[1],n[2],n[3],n[4],n[5]);
   
	int i, j;
	int m[2];
	for(i=0;i<6;i++)
	{
		for(j=0;j<2;j++)
		{
			if(n[i][j]=='0')
				m[j]=0;
			else if(n[i][j]=='1')
				m[j]=1;	
			else if(n[i][j]=='2')
				m[j]=2;	
			else if(n[i][j]=='3')
				m[j]=3;	
			else if(n[i][j]=='4')
				m[j]=4;	
			else if(n[i][j]=='5')
				m[j]=5;	
			else if(n[i][j]=='6')
				m[j]=6;	
			else if(n[i][j]=='7')
				m[j]=7;	
			else if(n[i][j]=='8')
				m[j]=8;	
			else if(n[i][j]=='9')
				m[j]=9;	
			else if((n[i][j]=='a') || (n[i][j]=='A'))
				m[j]=10;
			else if((n[i][j]=='b') || (n[i][j]=='B'))
				m[j]=11;
			else if((n[i][j]=='c') || (n[i][j]=='C'))
				m[j]=12;
			else if((n[i][j]=='d') || (n[i][j]=='D'))
				m[j]=13;
			else if((n[i][j]=='e') || (n[i][j]=='E'))
				m[j]=14;
			else if((n[i][j]=='f') || (n[i][j]=='F'))
				m[j]=15;
		}
		*(data+i) = m[0]<<4 | m[1];
	}
     printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",*data,*(data+1),*(data+2),*(data+3),*(data+4),*(data+5)); } int main() { unsigned char data[10]; getMac(data);    printf("0x%x\t0x%x\t0x%x\t0x%x\t0x%x\t0x%x\n",data[0],data[1],data[2],data[3],data[4],data[5]);    return 0; }

  

 

转载于:https://www.cnblogs.com/quliuliu2013/p/9340617.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Technitium MAC Address Changer允许您立即更改(恶搞)网络接口卡(NIC)的媒体访问控制(MAC)地址。它有一个非常简单的用户界面,并提供有关机器中每个网卡的充足信息。每个NIC都有制造商在其电路中硬编码的MAC地址。这个硬编码的MAC地址被Windows驱动程序用来访问以太网(LAN)。这个工具可以设置一个新的MAC地址到你的网卡,绕过原来的硬编码的MAC地址。Technitium MAC Address Changer是每个安全专家工具箱中必备的工具。 特征 适用于Windows 10,8和7,适用于32位和64位。 增强的支持IPv6的网络配置预设允许您在网络配置之间快速切换。 允许完整配置任何网络适配器。 具有完整软件功能的命令行选项。您可以从指定的预设文件中选择一个预设直接应用。 更新网卡供应商列表功能允许您从IEEE.org下载最新的供应商据(OUI)。 它是如何工作的? 这个软件只是写入一个值到Windows注册表中。当启用网络适配器设备时,Windows在键HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Class \ {4D36E972-E325-11CE-BFC1- 08002bE10318} \ [NIC的ID,例如0001]中搜索注册表值“NetworkAddress”。如果存在一个值,windows将使用它作为MAC地址,如果没有,windows将使用硬编码的制造商提供的MAC地址。某些网络适配器驱动程序内置此设备。它可以在Windows设备管理器的网络适配器的设备属性中的高级设置选项卡中找到。 如何更改MAC地址 启动MAC地址转换器将列出所有可用的网络适配器。 选择您要更改MAC地址的适配器。你会在下面得到你的选择的细节。 在“信息”选项卡中,找到“更改MAC地址”框。在该字段中输入新的MAC地址,然后点击Change Now!按钮。您甚至可以点击随机MAC地址按钮,从可用的供应商列表中填入随机选择的MAC地址。 要恢复网络适配器的原始MAC地址,请选择该适配器,然后在更改MAC地址框中单击恢复原始按钮。 注意:此工具不能更改Microsoft网桥的MAC地址。Network Bridge将自动使用第一个添加到网桥的NIC的原始MAC地址MAC地址的第一个字节设置为0x02。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值