2011-02-10 83 views
17

可能重複:
How to check the number of bytes consumed by my Structure?獲取結構的大小在C#

我在

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public struct test 
{ 
    public int a; 
    public uint16 b; 
} 

的包裝方式的結構如何獲得大小作爲編譯器的結構聲明sizeof只能在不安全的上下文中使用?

謝謝。

+0

你需要什麼? – 2011-02-10 11:23:03

+2

我需要通過網絡發送它。我得到的API需要我指定結構的字節包括頭+數據等 – Nick 2011-02-10 11:24:12

+0

看看http://stackoverflow.com/questions/2418749/c-why-sizeof-is-unsafe-and-how在一個安全的方式結構的大小 – Ray 2011-02-10 11:26:30

回答

1

您將sizeof運算符置於不安全的上下文中,就像編譯器建議的那樣?

像這樣的東西我想:

int size; 
unsafe 
{ 
    size=sizeof(Test); 
} 

但我不知道,如果你真的想這樣做。我傾向於使用普通的序列化器而不是具有特定佈局的結構。國際海事組織你應該使用這種結構只用於本地互操作,而不是簡單的序列化。

然後看看SizeOf函數編組的文檔也可能會混淆大小(不是在這個例子中)。

24

SizeOf方法會訣竅。

int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Point));