php如何将mac地址转成数字,以及数字转成mac地址? 如标题所示,将MAC地址转换成数字,以及将数字转换成MAC地址例如(该转换结果可能有误,只是举例):176527829747702 =======> 00-00-7F-FF-FF-FF00-00-7F-FF-FF-FF ======> 176527829747702 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 十六进制和十进制互换数字太大,只在 php7 中可以实现低版本的都整数越界了 要人给你帮忙好歹给个正确的例子啊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); mac地址最大也就281474976710655在php7以下的版本不会越界吧。 MAC 是六个字节,而 php 的整数是 long (4个字节)即 int32 类型,经特殊处理可表示 5个字节再大就转成科学计数法了只有 php7 才真正支持 int64(8个字节)mac地址最大也就281474976710655在php7以下的版本不会越界吧。 实测在我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以下的版本不会越界吧。 在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_LONG64typedef 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#elsetypedef 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以下的版本不会越界吧。 php或者apache如何选择IP? 3000分求PHP图片上传/放大缩小/裁减的源代码 产生的session文件到那里去了? 小字符串替换。 问一个if语句的问题 再次提问php+mysql大数据量的问题,如何优化排序! 数组中的引用是怎么回事 请问多表联合查询的问题 ,谢谢 请教:用php可以得到远程用户的ip,那如何用php得到远程用户的mac地址? 低价服务器托管(特价) ckeditor 4.5.8 的上传处理页 upload.php里应该怎么写,才能上传到目录下? 求大神帮忙解释一段php代码,关于crypt加密
数字太大,只在 php7 中可以实现
低版本的都整数越界了
用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);
mac地址最大也就281474976710655
在php7以下的版本不会越界吧。
再大就转成科学计数法了只有 php7 才真正支持 int64(8个字节)
mac地址最大也就281474976710655
在php7以下的版本不会越界吧。
整型是8个字节 常量 PHP_INT_SIZE = 8 PHP_INT_MAX = 9223372036854775807在http://php.net/manual/zh/language.types.integer.php
也有说道整型数的字长和平台有关,尽管通常最大值是大约二十亿(32 位有符号)。64 位平台下的最大值通常是大约 9E18。
mac地址最大也就281474976710655
在php7以下的版本不会越界吧。
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以下的版本不会越界吧。