如标题所示,将MAC地址转换成数字,以及将数字转换成MAC地址例如(该转换结果可能有误,只是举例):176527829747702     =======>     00-00-7F-FF-FF-FF
00-00-7F-FF-FF-FF      ======>    176527829747702

解决方案 »

  1.   

    十六进制和十进制互换
    数字太大,只在 php7 中可以实现
    低版本的都整数越界了
      

  2.   

    要人给你帮忙好歹给个正确的例子啊MAC地址转换成数字
    用str_replace和hexdec就可以了
    $num = hexdec(str_replace('-', '', $mac));数字转MAC地址
    用dechex再补0再用wordwrap就可以了
    $mac = wordwrap(substr('000000000000', 0, 12 - strlen(dechex($num))).dechex($num), 2, '-', true);
      

  3.   


    mac地址最大也就281474976710655
    在php7以下的版本不会越界吧。
      

  4.   

    MAC 是六个字节,而 php 的整数是 long (4个字节)即 int32 类型,经特殊处理可表示 5个字节
    再大就转成科学计数法了只有 php7 才真正支持 int64(8个字节)
    mac地址最大也就281474976710655
    在php7以下的版本不会越界吧。
      

  5.   

    实测在我CentOS 7 64bit /PHP 5.6.19上
    整型是8个字节 常量 PHP_INT_SIZE = 8 PHP_INT_MAX = 9223372036854775807在http://php.net/manual/zh/language.types.integer.php
    也有说道整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18。
    mac地址最大也就281474976710655
    在php7以下的版本不会越界吧。
      

  6.   

    在PHP5.6.22的源码php-5.6.22/Zend/zend.h中
    typedef union _zvalue_value {
    long lval; /* long value */
    double dval; /* double value */
    struct {
    char *val;
    int len;
    } str;
    HashTable *ht; /* hash table value */
    zend_object_value obj;
    zend_ast *ast;
    } zvalue_value;
    可见整型是long型在/usr/include/bits/wordsize.h 文件中有
    #if defined __x86_64__ && !defined __ILP32__
    # define __WORDSIZE 64
    #else
    # define __WORDSIZE 32
    #endif在 /usr/include/limits.h文件中又有
    #  if __WORDSIZE == 64
    #   define LONG_MAX 9223372036854775807L
    #  else
    #   define LONG_MAX 2147483647L
    #  endif
    #  define LONG_MIN  (-LONG_MAX - 1L)所以即使版本在PHP7以下 整型也可以是8字节的。在PHP7.0.7的源码php-7.0.7/Zend/zend_type.h中
    typedef union _zend_value {
    zend_long         lval; /* long value */
    double            dval; /* double value */
    zend_refcounted  *counted;
    zend_string      *str;
    zend_array       *arr;
    zend_object      *obj;
    zend_resource    *res;
    zend_reference   *ref;
    zend_ast_ref     *ast;
    zval             *zv;
    void             *ptr;
    zend_class_entry *ce;
    zend_function    *func;
    struct {
    uint32_t w1;
    uint32_t w2;
    } ww;
    } zend_value;
    整型是自定义的zend_long类型在php-7.0.7/Zend/zend_long.h中有
    #if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)
    # define ZEND_ENABLE_ZVAL_LONG64 1
    #endif
    #ifdef ZEND_ENABLE_ZVAL_LONG64
    typedef int64_t zend_long;
    typedef uint64_t zend_ulong;
    typedef int64_t zend_off_t;
    # define ZEND_LONG_MAX INT64_MAX
    # define ZEND_LONG_MIN INT64_MIN
    # define ZEND_ULONG_MAX UINT64_MAX
    # define Z_L(i) INT64_C(i)
    # define Z_UL(i) UINT64_C(i)
    # define SIZEOF_ZEND_LONG 8
    #else
    typedef int32_t zend_long;
    typedef uint32_t zend_ulong;
    typedef int32_t zend_off_t;
    # define ZEND_LONG_MAX INT32_MAX
    # define ZEND_LONG_MIN INT32_MIN
    # define ZEND_ULONG_MAX UINT32_MAX
    # define Z_L(i) INT32_C(i)
    # define Z_UL(i) UINT32_C(i)
    # define SIZEOF_ZEND_LONG 4
    #endif
    所以即使是PHP7 整型也有可能是4个字节的
    mac地址最大也就281474976710655
    在php7以下的版本不会越界吧。