2010-05-31 2 views
0

Я имею следующую структуру:Как инициализировать фиксированный массив байтов?

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

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

name, как предполагается, будет нулевым байтом ASCII строка, и Visual Studio отвергает все мои идеи, чтобы взаимодействовать с ним. Как его установить?

ответ

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++

+0

Спасибо за помощь. –

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; 
     } 
    } 
} 
+1

помните, что '* [a + b]' идентичен 'a [b]' в C#/C++/C ..., что означает, что вы можете записать последние 3 строки как 'p [1] = ...; p [2] = ...; p [3] = ...; ' – Unknown6656

Смежные вопросы