C/C++去掉MAC地址中的冒号,获取值

简介: 5种方法

':' 是字符ASCII码, ":"是字符串

printf("1. ':'   c==[%c], d==[%d], sizeof=[%d]\n",':',':',sizeof(':'));// ':'==int
printf("2. \":\"   c==[%c], s==[%s], d==[%d], sizeof=[%llu]\n", ":",":",":",sizeof(":"));//":"==字符串( "" 和 : 两个字符)

printf("\n");

char a1=':';
char *a2=":";
printf("a1==':'   c==[%c], d==[%d], sizeof=[%d]\n",a1,a1,sizeof(a1));// : 一个字符
printf("a2==\":\"   c==[%c], s==[%s], d==[%d], sizeof=[%d]\n", a2,a2,a2,sizeof(a2));//":"==字符串( "" 和 : 两个字符) ,a2指针在64位系统下是8位
printf("\n");
printf("a2==\":\"   c==[%c], d==[%d], sizeof=[%d]\n", *a2,*a2,sizeof(*a2));// : 一个字符
1. ':'   c==[:], d==[58], sizeof=[4]
2. ":"   c==[], s==[:], d==[4210688], sizeof=[2]

a1==':'   c==[:], d==[58], sizeof=[1]
a2==":"   c==[], s==[:], d==[4210688], sizeof=[8]

a2==":"   c==[:], d==[58], sizeof=[1]

C 语言

方法一

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* strdel(char* in_str,char del_x)
{
    char *p;
    char *out_str=(char *)malloc(strlen(in_str));
    char *q=out_str;
    for(p=in_str;*p!='\0';p++)
    {
        if(*p!=del_x)
        {
            *q=*p;
             q++;
        }
    }
    *q=*p;// *p=='\0'
    return out_str;
}

int main()
{
    char in_str[64];
    strcpy(in_str,"00:0c:29:c0:26:12");
    printf("in_str=[%s]\n",in_str);
    
    char *out_str=strdel(in_str,':');
    printf("out_str=[%s]\n",out_str);
    printf("Hello World!------------------------\n");
    return 0;
}
in_str=[00:0c:29:c0:26:12]
out_str=[000c29c02612]
Hello World!------------------------

方法二

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void strdel(char* in_str,char del_x)
{
    char *p;
    char *q;

    for(p=in_str,q=in_str;*p!='\0';p++)
    {
        if(*p!=del_x)
        {
            *q++=*p;// <==> *q=*p;q++;
        }
    }
    *q=*p;
}

int main()
{
    char in_str[64];
    strcpy(in_str,"00:0c:29:c0:26:12");
    printf("in_str=[%s]\n",in_str);
    strdel(in_str,':');
    printf("out=[%s]\n",in_str);
    printf("Hello World!------------------------\n");
    return 0;
}
in_str=[00:0c:29:c0:26:12]
out=[000c29c02612]
Hello World!------------------------

方法三

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *get_str(char *str)
{
    char *pch;
    char *ret_str=(char *)calloc(0,strlen(str));
    pch = strtok(str, ":");
    while (pch != NULL)
    {
        strcat(ret_str,pch);
        pch = strtok(NULL, ":");
    }
    return ret_str;
}
int main()
{
    char str[] = "00:0c:29:c0:26:12";
    char *ret_str;
    ret_str = get_str(str);
    printf("[%s]\n", ret_str);
    return 0;
}

C++

方法四

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    char *in_str="00:0c:29:c0:26:12";
    //std::string str = "00:0c:29:c0:26:12";
    std::string str(in_str);
    str.erase(std::remove(str.begin(), str.end(), ':'), str.end());
    std::cout << str << std::endl;
    cout << "Hello World!---" << endl;
    return 0;
}
000c29c02612
Hello World!---

方法五

QString str = "00:0c:29:c0:26:12";
QStringList list = str.split(":");
qDebug()<<list;                     // ("00", "0c", "29", "c0", "26", "12")
QString ret_str = list.join("");    //无间隔拼接
qDebug()<<ret_str;                  //"000c29c02612"

//QStringList的join函数可以将QStringList中的所有字符串用指定的字符串连接起来,形成一个新的字符串。
QStringList list2 = {"a", "b", "c"};
QString ret_str2=list2.join("-");
qDebug()<<ret_str2;                 //"a-b-c"
相关文章
|
7月前
|
编译器 C++
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
C++ 双冒号::开头的语法,::变量名,获取全局作用域变量
69 0
|
C++ Java
C++学习笔记第三天:类、虚函数、双冒号
类 class Box { public: double length; // 盒子的长度 double breadth; // 盒子的宽度 double height; // 盒子的高度 }; 类成员的作用域: public:公共成员。
1610 0
|
Shell 开发工具 Python
Mac上关于shell使用Python3和C++11声明
1.使用Python3         Mac上的shell上自带的Python版本是2.7,当需要使用Python3时,下载安装好Python时,在shell上敲入Python发现却还是显示Python2.
1019 0
|
C++ iOS开发 Windows
Mac上写C++
用惯Windows的同学可能刚开始用Mac的时候并不知道如何写C++,我刚开始在Mac上写C++的时候也遇到过这个困扰,Mac上并没有Windows上自己用习惯的Visual C++,下面我分享一下个人在写C++的时候所用的两个方法:       1.
993 0
|
IDE 开发工具 Windows
VC++获取网卡MAC、硬盘序列号、CPU ID、BIOS编号
<p> </p> <p>以下代码可以取得系统特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号) </p> <p>    BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码</p> <p>    UINT uSystemInfoLen = 0; // 在程序执行完毕后,此处存储取得的系统特征码的长度 </p> <p>    /
2911 0
|
15天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
25 2
|
21天前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
54 5
|
27天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
56 4