如何初始化固定字节数组?

时间:2010-05-31 07:04:39

标签: c# bytearray fixed

我有以下结构:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct cAuthLogonChallenge
{
    byte cmd;
    byte error;
    fixed byte name[4];

    public cAuthLogonChallenge()
    {
        cmd = 0x04;
        error = 0x00;
        name = ???
    }
}

name应该是一个以null结尾的ASCII字符串,而Visual Studio拒绝我与之交互的所有想法。我该如何设置?

2 个答案:

答案 0 :(得分:1)

您需要切换到不安全模式才能使用固定语句

http://msdn.microsoft.com/en-us/library/f58wzh21%28v=VS.80%29.aspx

http://msdn.microsoft.com/en-us/library/chfa2zb8%28v=VS.80%29.aspx

http://msdn.microsoft.com/en-us/library/zycewsya%28v=VS.80%29.aspx

将您的结构定义更改为unsafe struct ...然后您可以像在c / c ++中一样初始化数组

答案 1 :(得分:1)

知道了:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe struct cAuthLogonChallenge
{
    byte cmd;
    byte error;
    fixed byte name[4];

    public cAuthLogonChallenge(byte dummy)
    {
        cmd = 0x04;
        error = 0x00;
        fixed (byte* p = this.name)
        {
            *p = (byte)'J';
            *(p + 1) = (byte)'o';
            *(p + 2) = (byte)'n';
            *(p + 3) = 0;
        }
    }
}