我有:
sprintf("%02X" % 13)
哪个输出:
=>"OD"
我希望我的输出为:
=>"%0D"
我试过了:
sprintf("\%%02X" % 13)
但我收到错误warning: too many arguments for format string
。同样适用于:
sprintf("%%02X" % 13)
是否可以单独在sprintf中添加前导%
?
答案 0 :(得分:10)
文字%
必须以%%
转义:
sprintf('%%') #=> "%"
sprintf('%%%02X', 13) #=> "%0D"
# ^
# comma here
'%%%02X' % 13 #=> "%0D"
# ^
# percent sign here
如果这些符号太多,您可以将字符串文字分开以使其更明显:
sprintf('%%' '%02X', 13)
#=> "%0D"
在Ruby中,'foo' 'bar'
等同于'foobar'
,即相邻的字符串文字由解释器自动连接。
答案 1 :(得分:4)
sprintf('%%%02X', 13)
# => "%0D"
字段:%|其他格式:将显示百分号本身。没有争论。
即。您必须使用双%
转义%%
字符;就像你在常规字符串中使用\
一样逃避单个\\
。
答案 2 :(得分:1)
另一种可能性是使用Integer#to_s
:
"%" + 13.to_s(16).rjust(2, '0').upcase
#=> "%0D"
由于%
的{{3}}大于+
,您还可以写:
"%" + "%02X" % 13
#=> "%0D"
相当于
"%" + ("%02X" % 13)
#=> "%0D"