有没有一个免费的printf在.net上的实现?

15

问题:

是否有.NET Framework的免费实现printf/sprintf的方法?除了上面的链接,我找不到其他的实现方法。

谢谢!

更新:

感谢帮助,即使你没有找到任何东西。这意味着我必须自己来做(虽然我一直在尝试避免,但没办法...)
我编写了一个支持基本格式字符串的sprintf函数,你可以在这里找到它:https://sourceforge.net/projects/printfnet/。如果可能的话,我会尝试将其完整实现。


1
我不知道为什么这个有那么多赞。使用正则表达式的实现可能只需要30-50行简单的代码... - leppie
我真的很好奇,为什么你一定要使用printf... - swilliams
为什么您不能使用CPOL许可证?我看不出它会干扰您的GPL要求。 - leppie
4
关于许可问题,请参阅此主题:http://stackoverflow.com/questions/698610/is-the-code-project-open-license-a-gpl-compatible-license 是的,我可以自己实现,但考虑到所有的标志、宽度/精度限定符等,这需要一段时间、大量测试和比几个正则表达式更多的代码。 - Hali
只有在使用他人的GPL代码时,GPL才是不兼容的。如果项目是您自己的,并且基于GPL,您可以为任何包含的代码添加异常。话虽如此,也许联系作者并询问他是否会在GPL下提供代码的副本? - Erik Funkenbusch
神秘人:有时候最明显的解决方案是我最后想到的... :) 不过这次它没起作用。我给他发了电子邮件,但他甚至没有回复。 - Hali
3个回答

4
我认为你需要这个:http://www.codeproject.com/KB/printing/PrintfImplementationinCS.aspx 它是将C语言的printf函数移植到C#的免费实现。你应该知道作者指出,目前不支持所有的printf特性,但这可能是一个很好的起点。 编辑:我看到那个版本的许可证与你需要的不兼容-在这种情况下,我强烈建议查看直接调用非托管版本,正如以下博客文章所述。这可能是最兼容和最安全的做法。 如果这还不够,以下是一篇关于如何调用非托管printf函数的博客文章: http://community.bartdesmet.net/blogs/bart/archive/2006/09/28/4473.aspx 它看起来像是你从C#调用非托管printf所需要的全部内容:
[DllImport("msvcrt40.dll")]
public static extern int printf(string format, __arglist);

static void Main(string[] args)
{
   printf("Hello %s!\n", __arglist("Bart"));
}

请注意,在VS2008/2010中键入__arglist可能会导致IDE崩溃。直到下一个主要版本,微软都不会修复这个问题... - leppie
谢谢,但我也针对Silverlight,所以我不能调用本地函数。 - Hali

4
为什么不找一个用C编写的GPL兼容的printf实现并将其移植到.NET平台?

如果LGPL足够好的话,glibc的源代码在这里:http://ftp.gnu.org/gnu/glibc/ - stdio-common包含printf.c,它调用vfprintf.c中的vprintf函数。不过代码相当复杂... - Michael Stum
1
绝对不能完全排除这个想法,但是我曾经看到的几个实现方式都不适合移植到C# - 至少如果你关心代码的话 ;-) 也许更容易找到一个现有的测试套件,并从头开始编写程序。 - Christian.K

2
如何使用托管C++包装器?很确定你可以从那里调用printf。

我也针对Silverlight,所以无法调用本地函数。 - Hali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接