首页›文章›perl sprintf()函数详解

perl sprintf()函数详解

计算机技术 · perl 程序开发2013-05-100次浏览0 个评论

sprintf()函数返回一个格式化字串,格式化习惯是 C 的库函数 sprintf 的是 printf 习惯。用法如下:

perl
sprintf FORMAT, LIST

FORMAT 包含一个带有嵌入的域指示符的文本,LIST 里的元素就是逐一替换到这些域中去的。sprintf 的格式:

perl
域	含义
%%	一个百分号
%c	一个带有给定数字的字符
%s	一个字串
%d	一个有符号整数,十进制
%u	一个无符号整数,十进制
%o	一个无符号整数,八进制
%x	一个无符号整数,十六进制
%e	一个浮点数,科学记数法表示
%f	一个浮点数,用固定的小数点表示
%g	一个浮点数,以 %e 或 %f 表示

另外,Perl 允许下列广泛支持的转换:

perl
域	含义
%x	类似 %x,但使用大写字符
%E	类似 %e,但使用大写的"E"
%G	类似 %g,但是带一个大写的"E"(如果正确的话)
%b	一个无符号整数,二进制
%p	一个指针(输出十六进制的 Perl 值的地址)
%n	特殊:把到目前为止输出的字符数放到参数列表中的下一个变量里

最后,为了向下兼容(我们的意思就是“向下”),Perl 允许下列不必要的但广泛支持的转换:

perl
域	含义
%i	%d 的同义词
%D	%ld 的同义词
%U	%lu 的同义词
%O	%lo 的同义词
%F	%f 的同义词

Perl 允许下列众所周知的标志出现在 % 和转换字符之间:

text
域 | 含义|
space	用空格前缀正数
+	用加号前缀正数
-	在域内左对齐
-	用零而不是空格进行右对齐
#	给非零八进制前缀"0",给非零十六进制前缀"0x"
number	最小域宽度
.number	"精度":浮点数的小数点后面的位数字串最大长度。整数最小长度
l | | 把整数解释成 C 类型的 long 或者 unsigned long|
h	把整数解释成 C 类型的 short 或者 unsigned short(如果没有提供标志,那么把整数解释成 C 类型 int 或者 unsigned)

还有两个 Perl 相关的标志

text
域	含义
V	把整数解释成 Perl 标准的整数类型
v	把字串解释成一个整数向量,输出成用点分隔的数字,或者是用任意参数列表里前面带 * 的字串分隔

如果你的 Perl 理解“四倍数”(64位整数),不管是该平台本机支持还是因为你指明 Perl 带着该功能编译,那么字符 d u o x X b i D U O 打印64位整数,并且它们前面可以选择前缀 ll, L,或则 q。比如,%lld %16LX %qo。
如果 Perl 理解“long double”(要求该平台支持 long double),那么你可以在 e f g E F G 标志前面增加可选的 ll 或者 L。比如,%llf %Lg。
在标志里可以出现数字的位置,都可以用一个星号(“”)代替,这时候 Perl 使用参数列表里的下一个项作为给出的数字(也就是说,当作域宽度或者精度)。如果通过“”获取的域宽度是负数,那么它和“-”标志有一样的效果:左对齐。
v 标志可以用于显示任意字串里的序数值:

perl
sprintf "version is v%vd\n", $^V;      # Perl 的版本
sprintf "address is %vd\n", %addr;   # IPv4 地址
sprintf "address is %*vX\n", ":", $addr;   # IPv6 地址
sprintf "bits are %*vb\n", " ", $bits;   # 随机的位串

评论

0

评论加载中…

发表评论

0/2000