b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

CString类型的MAC地址转换为数组类型

电脑杂谈  发布时间:2020-03-23 17:06:17  来源:网络整理

声明数组_c#数组声明_cstring 数组 声明

在最近完成计算机网络课程设计的过程中,您需要将mac地址转换为六个字节. 我在互联网上找到了信息. 基本思想是将mac地址分为六个部分,每个部分为十六个. 基数将转换为十进制数,并分配给六字节数组的每一位. 后来,当查看库函数时,我发现了strtoul函数,并发现该函数可用于实现此函数. 实现功能如下:

int mac_str_to_bin( char *str, unsigned  char *mac)
{
    int i;
    char *s, *e=NULL;
    if ((mac == NULL) || (str == NULL)) {
        return -1;
    }
    s = (char *) str;
    for (i = 0; i < 6; ++i) {
        mac[i] = s ? strtoul (s, &e, 16) : 0;
        if (s)
            s = (*e) ? e + 1 : e;
    }
    return 0;
}

c#数组声明_声明数组_cstring 数组 声明

测试步骤如下:

int main(void)
{
    char *p = "11:22:33:44:55:66";
    unsignedchar dst[6];
    mac_str_to_bin(p,dst);
    printf("mac:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
    dst[0], dst[1], dst[2], dst[3], dst[4],  dst[5]);
    return 0;
}

c#数组声明_声明数组_cstring 数组 声明

打印结果为:

mac:11:22:33:44:55:66

声明数组_cstring 数组 声明_c#数组声明

我将简要分析该功能的实现方式.

unsigned long int strtoul(const char  *nptr, char **endptr, int base);

声明数组_cstring 数组 声明_c#数组声明

首先介绍strtoul函数. 它将以数字字符或符号字符开头,直到遇到非数字字符或字符串,停止读取,并读取base指定的数字字符串. 在基本模式下,nptr转换为长整数后,将指向停止时读取的位置,即在读取过程中遇到的非数字字符或字符串的位置. 这个地方也是endptr指针通过辅助指针来达到的目的.

在上面的实现函数中,主要实现是在for循环中. 第一句mac [i] = s? strtoul(s,&e,16): 0;首先确定s是否为空,如果前一个时间已到,如果整个mac解析完毕,则s将设置为空;如果s不为空,则表示mac地址解析尚未完成. 通过调用strtoul(),可以解析mac地址的一部分. 第二句是否(s)s =(* e)? E + 1: e;如果s不为空,则表示解析未完成,并且s当前为上一次解析过程中遇到的非数字字符或字符串的地址. 即,分隔符冒号': '的位置,此语句为删除该结肠.

实际上,在linux源代码中,实现此目标时也使用了本文开头提出的想法cstring 数组 声明,但它封装在函数库中. 由于库函数中包含API接口,因此我们不需要自己编写它们.

此功能的Linux源代码如下:

unsigned long long int strtoul(const  char *ptr, char **end, int base)
{
    unsigned long long ret = 0;
    if (base > 36)
        goto out;
    while (*ptr) {
        int digit;
        if (*ptr >= '0' && *ptr <= '9' && *ptr < '0'  + base)
            digit = *ptr - '0';
        else if (*ptr >= 'A' && *ptr < 'A' + base - 10)
            digit = *ptr - 'A' + 10;
        else if (*ptr >= 'a' && *ptr < 'a' + base - 10)
            digit = *ptr - 'a' + 10;
        else
            break;
        ret *= base;
        ret += digit;
        ptr++;
    }
    out:
    if (end)
        *end = (char *)ptr;
    return ret;
}

上述方法解决了将MAC地址转换为数组的问题,但是我遇到了一个新问题,即在vs2015的mac地址输入框中获取的mac地址是CString类型cstring 数组 声明,但是上面的函数参数它是一个char *类型. 因此,您必须首先将CString类型的mac地址转换为char *类型. 因此,我查找了一些信息,发现了一个更好的功能. 代码如下:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-149690-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...