• 海康威视工业相机MAC地址


    阅读海康威视提供的相机SDK源码时,发现里面提到了高MAC地址和低MAC地址,打印下来是两个十进制数,而相机标签上贴的是MAC地址:C4-2F-90-F5-CE-3A,一时不知道这个高低位的排列顺序是什么,后来问了技术客服解决了。


    1.关于海康相机MAC地址的SDK源码

    /// \~chinese 设备信息    \~english Device info
    typedef struct _MV_CC_DEVICE_INFO_
    {
        unsigned short      nMajorVer;                  ///< [OUT] \~chinese 主要版本                                 \~english Major Version
        unsigned short      nMinorVer;                  ///< [OUT] \~chinese 次要版本                                 \~english Minor Version
        unsigned int        nMacAddrHigh;               ///< [OUT] \~chinese 高MAC地址                                \~english High MAC Address
        unsigned int        nMacAddrLow;                ///< [OUT] \~chinese 低MAC地址                                \~english Low MAC Address
    
        unsigned int        nTLayerType;                ///< [OUT] \~chinese 设备传输层协议类型,e.g. MV_GIGE_DEVICE  \~english Device Transport Layer Protocol Type, e.g. MV_GIGE_DEVICE
    
        unsigned int        nReserved[4];               ///<       \~chinese 预留                                     \~english Reserved
    
        union
        {
            MV_GIGE_DEVICE_INFO stGigEInfo;             ///< [OUT] \~chinese GigE设备信息                             \~english GigE Device Info
            MV_USB3_DEVICE_INFO stUsb3VInfo;            ///< [OUT] \~chinese USB设备信息                              \~english USB Device Info
            MV_CamL_DEV_INFO    stCamLInfo;             ///< [OUT] \~chinese CameraLink设备信息                          \~english CameraLink Device Info
            // more ...
        }SpecialInfo;
    
    }MV_CC_DEVICE_INFO;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    打印我自己相机的高低MAC地址:
    在这里插入图片描述
    相机上的标签:
    在这里插入图片描述

    2.关于MAC地址

      MAC地址——媒体访问控制地址是一个硬件地址,每一台网络设备都用物理地址来标识自己并且MAC地址是全球唯一的,用来唯一标识以太网中的一台设备。

      MAC地址长度为48比特,通常用十六进制表示。

      MAC地址的长度为48位(6个字节),通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号。

      MAC地址包含两部分:

    • 1、前24比特是组织唯一标识符(OUI,Organizationally Unique Identifier),由IEEE统一分配给设备制造商。例如,华为的网络产品的MAC地址前24比特是0x00e0fc。
    • 2、后24位序列号是厂商分配给每个产品的唯一数值,由各个厂商自行分配(这里所说的产品可以是网卡或者其他需要MAC地址的设备)。

    3.关于海康相机高低MAC地址解读

      一开始看了网上关于MAC的解读,以为高MAC地址对应前3个字节,低MAC地址对应后3个字节。。。

      实际是高MAC地址对应前2个字节,低MAC地址对应后4个字节。

    相机MAC地址:C4-2F-90-F5-CE-3A
    高MAC地址:50223——C4-2F
    低MAC地址2432028218——90-F5-CE-3A
    
    • 1
    • 2
    • 3

    4.通过输入相机的MAC地址来决定连接哪个相机

      思路:输入相机标签上面的MAC地址,根据海康相机的高低MAC地址规则,将输入的MAC地址转为高低MAC地址,再去和枚举到的相机高低位MAC地址进行比较。(PS:由于int类型的范是-2147483648~2147483647,而以本相机为例的低MAC地址值是2432028218,显示已经超过了int的范围,所以需要设数据类型为unsigned int)。

    // 通过输入相机的MAC地址来决定连接哪个相机
    void macAddrDecide()
    {
        unsigned int mac_addr_high = 0, mac_addr_low = 0;
        std::string input_mac_addr = "C4-2F-90-F5-CE-3A";
        std::cout << "mac地址:" << input_mac_addr.size() << std::endl;
        if (input_mac_addr.size() == 17) {
            std::string str_mac_addr_high = input_mac_addr.substr(0, 2);
            str_mac_addr_high += input_mac_addr.substr(3, 2);
            std::string str_mac_addr_low = input_mac_addr.substr(6, 2);
            str_mac_addr_low += input_mac_addr.substr(9, 2);
            str_mac_addr_low += input_mac_addr.substr(12, 2);
            str_mac_addr_low += input_mac_addr.substr(15, 2);
    
            std::cout << str_mac_addr_high << std::endl;
            std::cout << str_mac_addr_low << std::endl;
    
            mac_addr_high = std::stoi(str_mac_addr_high, 0, 16);
            mac_addr_low = std::strtoul(str_mac_addr_low.substr(0).c_str(), NULL, 16);
        }
        else {
            std::cout << "mac地址输入错误!" << std::endl;
        }
        std::cout << "高MAC地址:" << mac_addr_high << std::endl;
        std::cout << "低MAC地址:" << mac_addr_low << std::endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    输出:
    在这里插入图片描述

  • 相关阅读:
    axios引入的详细讲解
    关于对于Java中Entity以及VO,以及DTO中Request对象序列化的学习
    R语言中的prophet预测时间序列数据模型
    2022/7/28
    操作系统基础知识1
    HTML+CSS+JS制作炫酷特效代码
    GitHub上标星120k的Java进阶面试教程等!(建议收藏)
    【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
    代码随想录算法训练营第三十八天|理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯
    分享让PPT变高级的两个小技巧
  • 原文地址:https://blog.csdn.net/qq_45445740/article/details/125505582