【问题标题】:IFormattable.ToString not working as expected for Hexadecimal formatting对于十六进制格式,IFormattable.ToString 无法按预期工作
【发布时间】:2016-02-19 16:49:17
【问题描述】:

String.Format 和 IFormattable.ToString(format, value) 在尝试格式化为十六进制时提供不同的结果。使用 IFormattable.ToString(format, value) 时如何得到正确的结果

string format = "0x{0:X4}";
Console.WriteLine(string.Format(format, 255)); //prints- 0x00FF

IFormattable formattableValue = (IFormattable)255;
Console.WriteLine(formattableValue.ToString(format, null)); //prints- 25x{5:X4}

【问题讨论】:

    标签: c# formatting hex string-formatting


    【解决方案1】:

    string.Format()ToString() 的格式化字符串格式不同。特别是,string.Format() 允许格式周围的其他文本,而 IFormattable.ToString() 只允许文本本身的格式说明符。

    在您的示例中,格式字符串 "0x{0:X4}" 被视为值 255 的整个格式说明符。0 是数字的占位符,其余的只是额外的字符文字。

    如果您希望 IFormattable.ToString() 输出与 string.Format() 相同的输出,则必须以等效方式使用它:

    "0x" + formattableValue.ToString("X4", null);
    

    【讨论】:

      猜你喜欢
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多