下面内容摘自: http://www./perlbc/perljj/1133.html
sprintf()函数返回一个格式化字串,格式化习惯是 C 的库函数 sprintf 的是 printf 习惯。用法如下:
FORMAT 包含一个带有嵌入的域指示符的文本,LIST 里的元素就是逐一替换到这些域中去的。sprintf 的格式:
域 含义
%% 一个百分号
%c 一个带有给定数字的字符
%s 一个字串
%d 一个有符号整数,十进制
%u 一个无符号整数,十进制
%o 一个无符号整数,八进制
%x 一个无符号整数,十六进制
%e 一个浮点数,科学记数法表示
%f 一个浮点数,用固定的小数点表示 保留两位小数 %.2f
%g 一个浮点数,以 %e 或 %f 表示
另外,Perl 允许下列广泛支持的转换:
域 含义
%x 类似 %x,但使用大写字符
%E 类似 %e,但使用大写的“E”
%G 类似 %g,但是带一个大写的“E”(如果正确的话)
%b 一个无符号整数,二进制
%p 一个指针(输出十六进制的 Perl 值的地址)
%n 特殊:把到目前为止输出的字符数放到参数列表中的下一个变量里
最后,为了向下兼容(我们的意思就是“向下”),Perl 允许下列不必要的但广泛支持的转换:
域 含义
%i %d 的同义词
%D %ld 的同义词
%U %lu 的同义词
%O %lo 的同义词
%F %f 的同义词
Perl 允许下列众所周知的标志出现在 % 和转换字符之间:
域 | 含义|
space 用空格前缀正数
+ 用加号前缀正数
- 在域内左对齐
- 用零而不是空格进行右对齐
# 给非零八进制前缀“0”,给非零十六进制前缀“0x”
number 最小域宽度
.number “精度”:浮点数的小数点后面的位数字串最大长度。整数最小长度
l | | 把整数解释成 C 类型的 long 或者 unsigned long|
h 把整数解释成 C 类型的 short 或者 unsigned short(如果没有提供标志,那么把整数解释成 C 类型 int 或者 unsigned)
还有两个 Perl 相关的标志
域 含义
V 把整数解释成 Perl 标准的整数类型
v 把字串解释成一个整数向量,输出成用点分隔的数字,或者是用任意参数列表里前面带 * 的字串分隔
如果你的 Perl 理解“四倍数”(64位整数),不管是该平台本机支持还是因为你指明 Perl 带着该功能编译,那么字符 d u o x X b i D U O 打印64位整数,并且它们前面可以选择前缀 ll, L,或则 q。比如,%lld LX %qo。
如果 Perl 理解“long double”(要求该平台支持 long double),那么你可以在 e f g E F G 标志前面增加可选的 ll 或者 L。比如,%llf %Lg。
在标志里可以出现数字的位置,都可以用一个星号(“*”)代替,这时候 Perl 使用参数列表里的下一个项作为给出的数字(也就是说,当作域宽度或者精度)。如果通过“*”获取的域宽度是负数,那么它和“-”标志有一样的效果:左对齐。
v 标志可以用于显示任意字串里的序数值:
sprintf "version is v%vd\n", $^V; # Perl 的版本
sprintf "address is %vd\n", %dr; # IPv4 地址
sprintf "address is %*vX\n", ":", $addr; # IPv6 地址
sprintf "bits are %*vb\n", " ", $bits; # 随机的位串
例子:
#!/usr/local/bin/perl -w
$a=125;
$a=sprintf("%b",$a)+0;
print $a."\n";
结果:
bash-3.00$ ./TenToTwo.pl
1111101