2010-03-01 80 views
14

的問題是:有.net的printf的免費實現嗎?

是否有免費的.net框架的printf/sprintf的實現?除了上述鏈接,我找不到任何東西。

謝謝!

更新:

感謝您的幫助,即使你什麼也找不到。這意味着我只需要自己做(我試圖避免它,但哦...)
我煮了一個支持基本格式字符串的sprintf函數,你可以在這裏找到它:https://sourceforge.net/projects/printfnet/。如果可以的話,我會盡力使它成爲一個完整的實現。

+1

我不知道爲什麼這麼多upvotes。使用正則表達式的實現可能可以在30-50行的瑣碎代碼中完成... – leppie 2010-03-01 21:26:52

+0

我真的很好奇爲什麼你絕對需要printf ... – swilliams 2010-03-01 21:27:04

+0

爲什麼不能使用CPOL許可證?我不知道這是如何幹擾您的GPL要求的。 – leppie 2010-03-01 21:28:46

回答

2

託管C++包裝器如何?很確定你可以從那裏調用printf。

+0

我的目標也是Silverlight,所以我不能調用本地函數。 – Hali 2010-03-01 22:57:30

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

看起來這是所有你需要調用從非託管printf C#:

[DllImport("msvcrt40.dll")] 
public static extern int printf(string format, __arglist); 

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

請注意,在VS2008/2010中輸入__arglist可能會導致IDE崩潰。 MS不會修復,直到下一個主要版本... – leppie 2010-03-01 21:25:10

+0

謝謝,但我也瞄準了Silverlight,所以我不能調用本機功能。 – Hali 2010-03-01 22:55:33

4

爲什麼不找到一個寫入printf的GPL兼容實現在C並將其移植到.NET?

+0

如果LGPL足夠好,glibc的源代碼位於:http://ftp.gnu.org/gnu/glibc/ - stdio-common包含調用vfprintf.c中vprintf函數的printf.c。雖然很漂亮,但... – 2010-03-01 21:30:28

+0

絕對不排除這個想法,但是我在當時看到的幾個實現不僅僅是不適合移植到C# - 至少如果你關心代碼的話; - )找到一個現有的測試套件可能會更容易,並以某種方式從頭開始編程。 – 2010-03-02 05:38:58