新闻  |   论坛  |   博客  |   在线研讨会
蓝牙MAC地址从字符串变成hex
电子禅石 | 2018-01-12 13:30:23    阅读:400   发布文章

编译环境:DEV-C++ 5.6.3

主要实现:字符串的MAC转换成6字节 数值型MAC地址,及从大端模式转换成小端模式

#include "stdio.h"

typedef unsigned          char uint8_t;
typedef unsigned short     int uint16_t;
typedef unsigned           int uint32_t;


static uint8_t charToData(const char ch)
{
    switch(ch)
    {
        case '0':return 0;
        case '1':return 1;
        case '2':return 2;
        case '3':return 3;
        case '4':return 4;
        case '5':return 5;
        case '6':return 6;
        case '7':return 7;
        case '8':return 8;
        case '9':return 9;
        case 'a':
        case 'A':return 10;
        case 'b':
        case 'B':return 11;
        case 'c':
        case 'C':return 12;
        case 'd':
        case 'D':return 13;
        case 'e':
        case 'E':return 14;
        case 'f':
        case 'F':return 15;
    }
}

void strToMac(const char * szMac,uint8_t *pMac)
{
    const char *pTemp = szMac;
    int i=0;
    for(i=0;i<6;++i)
    {
        pMac[i]=charToData(*pTemp++)*16; //取值后指针加1
        pMac[i] +=charToData(*pTemp++);
    //    pTemp++;        
    }
}

void big_to_little(uint8_t *srcArray,uint8_t *desArray,uint8_t length)
{
    int i=0;
    for(i=0;i<=length;i++)
    {
        desArray[length-i]=srcArray[i];
    }
}

main()
{
    char test[12]="F891722C335B";
    uint8_t MAC[6];
    uint8_t des_MAC[6];
    strToMac(test,MAC);
    printf("%x,%x,%x,%x,%x,%x\r\n",MAC[0],MAC[1],MAC[2],MAC[3],MAC[4],MAC[5]);
    big_to_little(MAC,des_MAC,5);
    printf("%x,%x,%x,%x,%x,%x\r\n",des_MAC[0],des_MAC[1],des_MAC[2],des_MAC[3],des_MAC[4],des_MAC[5]);
    
}

结果显示:
参与讨论
登录后参与讨论
推荐文章
最近访客