w**2 发帖数: 724 | 1 hi i have this line,
$MACAddress = sprintf("%06x", $MACAddress);
1. when $MACAddress was -1, this line converts it to ffffffffffffffff
instead of ffffffff, i'm on a 32-bit linux pc.
why ?
2. in my code, i need to write $MACAddress twice.
how to use some shortcut e.g. $1 ?
Thanks !
BTW, i LOVE Perl, :) |
e*******o 发帖数: 4654 | 2 1.
➜ perl -MDevel::Peek -E 'Dump(-1)'
SV = IV(0x15f02a0) at 0x15f02b0
REFCNT = 1
FLAGS = (PADTMP,IOK,READONLY,pIOK)
IV = -1
this show -1 is stored as IV internally.
➜ perl -V:ivsize
ivsize='8';
the unit is bytes, so size in bit
ivszie * 8 = 64 .
2. same with C, 1$
http://perldoc.perl.org/functions/sprintf.html |
w**2 发帖数: 724 | 3 大牛,请问如何把-1 打印成 ffffffff ?
别的都已经是8个字了,就这个-1是16个字。
谢谢!
【在 e*******o 的大作中提到】 : 1. : ➜ perl -MDevel::Peek -E 'Dump(-1)' : SV = IV(0x15f02a0) at 0x15f02b0 : REFCNT = 1 : FLAGS = (PADTMP,IOK,READONLY,pIOK) : IV = -1 : this show -1 is stored as IV internally. : ➜ perl -V:ivsize : ivsize='8'; : the unit is bytes, so size in bit
|
n*******e 发帖数: 4894 | 4 只要结果超过8个字符,跟%08没关系了,这是如果不够8个字符前面加0凑足到8个
【在 w**2 的大作中提到】 : 大牛,请问如何把-1 打印成 ffffffff ? : 别的都已经是8个字了,就这个-1是16个字。 : 谢谢!
|
e*******o 发帖数: 4654 | 5 不值得,你看看文档,把 -1 当成特殊情况吧。
【在 w**2 的大作中提到】 : 大牛,请问如何把-1 打印成 ffffffff ? : 别的都已经是8个字了,就这个-1是16个字。 : 谢谢!
|
n*******e 发帖数: 4894 | 6 $MACAddress =sprintf("%.8s" ,(sprintf("%08x", $MACAddress)));
也许这是想要的?如果大于八位,就去掉末尾多余的
$MACAddress = sprintf("%08x", $MACAddress) =~ s/.*(\w{8})$/$1/r;
如果想truncate的是前面的,就用上面这种办法
【在 n*******e 的大作中提到】 : 只要结果超过8个字符,跟%08没关系了,这是如果不够8个字符前面加0凑足到8个
|
n*******e 发帖数: 4894 | 7 恩,一般这种情况手动处理一下就好了
【在 e*******o 的大作中提到】 : 不值得,你看看文档,把 -1 当成特殊情况吧。
|
w**2 发帖数: 724 | |
f*******n 发帖数: 12623 | 9 $MACAddress = sprintf("%06x", $MACAddress & 0xffffffff); |