c# – String.Format()前导零的十六进制不适用于第二个参数
作者:互联网
我在使用String.Format()时遇到了一个奇怪的问题.我需要格式化带有前导零的两个十六进制数字以填充最多8位数.但是,它仅适用于第一个参数({0:X8}).对于第二个参数({1:X8}),仅打印“X8”.
这是我的代码:
public struct DataDirectory
{
public uint VirtualAddress
{
get;
internal set;
}
public uint Size
{
get;
internal set;
}
public override string ToString()
{
return String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}}}", VirtualAddress, Size);
}
}
调试器输出打印:
编辑:如果我删除格式字符串的开头和结尾的花括号似乎工作,但后来我缺少从ToString()返回的字符串中的那些(调试器仍然将这些添加到QuickWatch窗口):
return String.Format("VirtualAddress=0x{0:X8},Size=0x{1:X8}", VirtualAddress, Size);
是否可以使用String.Format()格式化两个十六进制数字?
解决方法:
小心所有那些关闭括号}}}.
您可以为其使用单独的格式项,如Size = 0x {1:X8} {2}.所以:
String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}{2}",
VirtualAddress, Size, "}"
)
{1:X8}}}的问题在于,不清楚哪个double}}是转义的},哪个}}正在关闭该项目.解析器实际上调用了Size.ToString(“X8}”),这不是你想要的.
现在你正朝着那个方向前进,也许这样做:
String.Format("{2}VirtualAddress=0x{0:X8},Size=0x{1:X8}{3}",
VirtualAddress, Size, "{", "}"
)
标签:c,string-format 来源: https://codeday.me/bug/20190623/1275331.html