C# 6引入了字符串插值和一种更简洁的指定格式字符串的方式。
IntPtr ptr = new IntPtr(0xff);
Console.WriteLine(ptr.ToString()); // 255
Console.WriteLine(ptr.ToString("x")); // ff
Console.WriteLine($"0x{ptr.ToString("x")}"); // 0xff
Console.WriteLine($"0x{ptr:x}"); //0x255
为什么最后两行输出结果不同?我是否漏掉了什么?
顺便提一下,这是dotnet core中IntPtr ToString()的源代码:
public unsafe String ToString(String format)
{
#if WIN32
return ((int)m_value).ToString(format, CultureInfo.InvariantCulture);
#else
return ((long)m_value).ToString(format, CultureInfo.InvariantCulture);
#endif
}
$"0x{(int)ptr:x}" // 0xff
- vasily.sibToString
进行比较 - 更准确的做法是使用string.Format("{0:x}", ptr);
进行比较,这也会返回 255。 - Damien_The_Unbeliever