程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 探析C#文件方式讀寫結構體(1)

探析C#文件方式讀寫結構體(1)

編輯:關於C語言

最近一直在研究.Net Micro Framework字體文件(tinyfnt),由於tinyfnt文件頭部有一段描述數據,所以很想定義一個結構體,像VC一樣直接從文件中讀出來,省得用流一個個解析很是麻煩。

沒有想到在中竟沒有直接的指令,想必設計者認為提供了流和序列化技術,一切問題都可以迎刃而解了。

在中結構體是一個比較復雜的東西,在此之上有很多需要設置的參數,否則用起來就很容易出錯。下面是msdn上一段描述,看看也許有助於理解C#語言中的結構體。

通過使用屬性可以自定義結構在內存中的布局方式。例如,可以使用 StructLayout(LayoutKind.Explicit) 和 FIEldOffset 屬性創建在 C/C++ 中稱為聯合的布局。

[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestUnion
{
[System.Runtime.InteropServices.FIEldOffset(0)]
public int i;
[System.Runtime.InteropServices.FIEldOffset(0)]
public double d;
[System.Runtime.InteropServices.FIEldOffset(0)]
public char c;
[System.Runtime.InteropServices.FIEldOffset(0)]
public byte b;
}

在上一個代碼段中,TestUnion 的所有字段都從內存中的同一位置開始。

以下是字段從其他顯式設置的位置開始的另一個示例。

[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
struct TestExplicit
{
[System.Runtime.InteropServices.FIEldOffset(0)]
public long lg;
[System.Runtime.InteropServices.FIEldOffset(0)]
public int i1;
[System.Runtime.InteropServices.FIEldOffset(4)]
public int i2;
[System.Runtime.InteropServices.FIEldOffset(8)]
public double d;
[System.Runtime.InteropServices.FIEldOffset(12)]
public char c;
[System.Runtime.InteropServices.FIEldOffset(14)]
public byte b;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved