2009-12-10 41 views
1

我有一個python代碼計算矩陣,我想從C代碼中使用這個矩陣(或數組,或列表)。
我想從python代碼中醃製矩陣,並從c代碼中取消它,但是我找不到有關如何執行此操作的文檔或示例。 我發現了關於編組數據的一些信息,但沒有提到從C中刪除。如何從C代碼unpickle

編輯: 評論者Peter H問我是否在使用numpy數組。答案是肯定的。

+1

最佳答案可能取決於具體情況。這是一個numpy數組(如果沒有,爲什麼不呢?)。你的C代碼是否正在使用任何外部庫來處理它?你真的希望這是多麼一般?我只是將numpy數組轉換爲「raw」,並將它讀入C語言的malloc'd內存塊中,除非我有你沒有提到的特殊需求。 – 2009-12-10 16:19:05

+0

借調彼得漢森 - 如果你使用numpy,你基本上可以免費獲得這個,不需要拆卸。 – 2009-12-10 17:33:57

回答

5

你可能想要使用更標準化的東西,比如JSON。你在Python 2.6中有一個JSON模塊。 C有6種不同的JSON模塊。

您可能想要使用更類似C的東西,如Python struct模塊。它可以直接構建一個兼容C的對象,使您免受酸洗和拆卸的困擾。 http://docs.python.org/library/struct.html

+0

Struct似乎更適合於編寫ioctl之類的東西,或者在內存中構建結構。編寫二進制blob並不便於調試c代碼。我想我會用csv或json去 – shodanex 2009-12-10 15:59:21

1

查看關於在Mark Pilgrim的Dive Into Python中序列化數據的章節。他在那裏指出:「pickle協議是Python專用的;不能保證跨語言兼容性,你可能無法獲得你剛剛創建的pickle文件,並在Perl,PHP中使用它做任何有用的事情,Java或任何其他語言。「

也許JSON是一個更好的選擇,也在該章中解釋。

0

此外JSON,也有具有爲Python,C++和Java的 '天然' 的支持(從谷歌)的Google Protocol Buffers - 和一些的第三方綁定到其他語言,包括C.

2

Protocol Buffers是一種有趣的方法來序列化信息也是非常緊湊和快速的(與C++相比,支持C語言並不是發佈的protobuf包的一部分,但在某些C項目中可以接受某些C++代碼的鏈接,或者在那裏可能是第三方實現,如protobuf-c - 有關其他第三方附件的列表,請參閱here)。