1、結構陣列:
在c語言中我們可以通過struct關鍵字定義結構型別,結構中的字段佔據連續的記憶體空間,每個結構體占用的記憶體大小都相同,因此可以很容易地定義結構陣列。和c語言一樣,在numpy中也很容易對這種結構陣列進行操作。只要numpy中的結構定義和c語言中的定義相同,numpy就可以很方便地讀取c語言的結構陣列的二進位制資料,轉換為numpy的結構陣列。
假如我們需要建立的c語言的結構如下圖:
1本結構體為我的乙個專案中用到的部分巨集定義沒有給出struct
cal_ctrl;
現在使用python中的numpy實現這個結構體:
1 cal_ctrl = np.dtype(,align=true)#view code結構體中資料型別
在這段**中使用np.dtype來建立結構的每個字段,並且對每個欄位的型別進行初始化型別,
可以使用下面的**來新增例項;
a =np.array([(......),(.......)],可以使用a.dtype來檢視結構的資料型別dtype=cal_ctrl)#或者
a= np.empty((1), dtype=cal_ctrl)#
建立了乙個空的例項
#可以使用numpy建立陣列的方法來建立它的例項,需要自建立陣列的函式中加dtype=cal_ctrl
a[0][''ifrm_num''] = 45使用下面的**可以將python結構裝換為bin二進位制檔案來提供給c語言使用#通過a來修改或者訪問結構的屬性。
a.tofile("test.bin")
記憶體對其問題:
c語言的結構體為了記憶體定址方便,會自動的新增一些填充用的位元組,這叫做記憶體對齊。例如如果把下面的name[32]改為name[30]的話,由於記憶體對齊問題,在name和age中間會填補兩個位元組,最終的結構體大小不會改變。因此如果numpy中的所配置的記憶體大小不符合c語言的對齊規範的話,將會出現資料錯位。為了解決這個問題,在建立dtype物件時,可以傳遞引數align=true,這樣numpy的結構陣列的記憶體對齊和c語言的結構體就一致了。
利用下面的c語言可以把二進位制檔案讀出來:
#posted @include
struct person
;struct person p[2];
void main ()
2018-06-15 09:49
田灣第一帥 閱讀(
...)
編輯收藏
用python實現結構體陣列
在c語言中我們可以通過struct關鍵字定義結構型別,結構中的字段佔據連續的記憶體空間,每個結構體占用的記憶體大小都相同,因此可以很容易地定義結構陣列。和c語言一樣,在numpy中也很容易對這種結構陣列進行操作。只要numpy中的結構定義和c語言中的定義相同,numpy就可以很方便地讀取c語言的結構...
用結構體實現通訊錄
問題描述 實現乙個通訊錄 通訊錄可以用來儲存1000個人的資訊,每個人的資訊包括 姓名 性別 年齡 住址 提供方法 1.新增聯絡人資訊 2.刪除指定聯絡人資訊 3.查詢指定聯絡人資訊 4.修改指定聯絡人資訊 5.顯示所有聯絡人資訊 6.清空所有聯絡人資訊 標頭檔案 contacts.h ifndef...
結構體中呼叫結構體成員到底用 還是用
結構體成員運算子。指標運算子。1 如果結構體中的成員均為一般變數 包括結構體變數 則使用 如果成員變數為指標 不管指向什麼,包括結構體 則使用 2 如果定義了結構體陣列指標,則可分別使用 和 區別在於指標帶下標時,以是陣列形式訪問,此時用 如果不帶下標 或使用偏移 此時用 用指向結構體型別變數表示結...