String.Format() 带前导零的十六进制不适用于第二个参数
String.Format() Hex with leading zero doesn't work for second argument
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 window):
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}}}
的问题是不清楚哪个双 }}
是转义的 }
,哪个单 }
正在关闭项目。解析器实际上调用了 Size.ToString("X8}")
,这不是您想要的。
现在你正朝着那个方向前进,或许可以这样做:
String.Format("{2}VirtualAddress=0x{0:X8},Size=0x{1:X8}{3}",
VirtualAddress, Size, "{", "}"
)
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 window):
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}}}
的问题是不清楚哪个双 }}
是转义的 }
,哪个单 }
正在关闭项目。解析器实际上调用了 Size.ToString("X8}")
,这不是您想要的。
现在你正朝着那个方向前进,或许可以这样做:
String.Format("{2}VirtualAddress=0x{0:X8},Size=0x{1:X8}{3}",
VirtualAddress, Size, "{", "}"
)