首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带前导为零的String.Format()十六进制不适用于第二个参数

带前导为零的String.Format()十六进制不适用于第二个参数
EN

Stack Overflow用户
提问于 2015-02-28 11:11:07
回答 1查看 3.1K关注 0票数 5

我和String.Format()正面临着一个奇怪的问题。我需要格式化两个十六进制数字与前导零,以垫最多8位数。但是,它只适用于第一个参数({0:X8})。对于第二个参数({1:X8}),只打印"X8“。

这是我的密码:

代码语言:javascript
复制
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窗口中):

代码语言:javascript
复制
return String.Format("VirtualAddress=0x{0:X8},Size=0x{1:X8}", VirtualAddress, Size);

可以用String.Format()格式化两个十六进制数吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-28 11:14:57

小心所有那些关闭大括号}}}。您可以为它使用单独的格式项,如在Size=0x{1:X8}{2}中。所以:

代码语言:javascript
复制
String.Format("{{VirtualAddress=0x{0:X8},Size=0x{1:X8}{2}", 
  VirtualAddress, Size, "}"
  )

{1:X8}}}的问题是,不清楚哪个双}}是转义},以及哪个}正在关闭该项目。解析器实际上调用了Size.ToString("X8}"),这不是您想要的。

现在你要朝那个方向走,也许你要这样做:

代码语言:javascript
复制
String.Format("{2}VirtualAddress=0x{0:X8},Size=0x{1:X8}{3}", 
  VirtualAddress, Size, "{", "}"
  )
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28781022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档