首页 > 解决方案 > 如何将 Int32 转换为带有前导 0x 的字符串(以 16 为基数)?

问题描述

在 shell 上,我将一个数字(例如 29360134)转换并格式化为字符串“0x1c00006”:

printf "%#08x" 29360134 # -> 0x1c00006

但是,在 Crystal 中,我使用相同的格式字符串得到不同的结果:

puts("%#08x" % 29360134).inspect # -> 01c00006

将 Int32 转换为带有前导 0x 的字符串的正确方法是什么?

标签: crystal-lang

解决方案


Crystal 目前没有实施该#标志。您必须像这样自己添加前缀:

puts "0x%08x" % 29360134

您可以在https://github.com/crystal-lang/crystal/blob/1cd278d346b16b9ab42a62a4746086c58a8da2f9/src/string/formatter.cr#L222查看当前实现

请注意如何没有flags.sharp.


推荐阅读