2010-10-20 9 views
2

Je travaille dans une application C# wpf dans laquelle je veux faire plusieurs choses. Je travaille avec des tableaux d'octets pour composer des messages MIDI Show Control (spécifiés dans la spécification MSC 1.0).Convertir en tableau d'octets et insérer dans un autre tableau

La structure de ce message est qu'un octet 0x00 est comme une virgule entre toutes les parties du message. Je compose un message comme celui-ci:

byte[] data =   
             {(byte)0xF0, // SysEx 
             (byte)0x7F, // Realtime 
             (byte)0x7F, // Device id 
             (byte)0x02, // Constant 
             (byte)0x01, // Lighting format 
             (commandbyte), // GO   
             (qnumber), // qnumber  
             (byte)0x00, // comma 
             (qlist), // qlist 
             (byte)0x00, // comma 
             (byte)0xF7, // End of SysEx   


      }; 

Je veux que l'utilisateur de remplir des entiers non signés (comme 215,5) et je veux convertir ces chiffres en octets (sans octets 0x00, car le message est interprété mal).

Quelle est la meilleure façon de convertir les nombres et placer le tableau d'octets dans les endroits mentionnés ci-dessus?

Répondre

1

Je l'ai trouvé comme ça:

quelqu'un a utilisé le code de conversion d'un autre comme celui-ci:

static byte[] VlqEncode(int value)  
{ 
    uint uvalue = (uint)value; 
    if (uvalue < 128) 
     return new byte[] { (byte)uvalue }; 

    // simplest case   
    // calculate length of buffer required 
    int len = 0;      
    do 
    {    
     uvalue >>= 7; 
    } while (uvalue != 0); 

    // encode   
    uvalue = (uint)value;   
    byte[] buffer = new byte[len]; 
    int offset = 0;   
    do {   buffer[offset] = (byte)(uvalue & 127); 
     // only the last 7 bits    
     uvalue >>= 7;   if(uvalue != 0) buffer[offset++] |= 128; 
     // continuation bit   
    } while (uvalue != 0);   
    return buffer;  
} 

Puis-je utiliser pour convertir le nombre entier:

byte[] mybytearray = VlqEncode(integer); 

je puis faire une nouvelle arrayliste dans lequel j'ajoute chaque élément dans l'ordre suivant:

ArrayList mymessage = new ArrayList(); 
foreach(byte uvalue in mymessage) 
{ 
    mymessage.Add((byte)uvalue); 
} 
mymessage.Add((byte)0x00); 

` et ainsi de suite jusqu'à ce que j'ai le bon message. Je dois seulement alors convertir ceci un tableau d'octet comme ceci:

byte[] data = new byte[mymessage.count]; 
data = (byte[])mymessage.ToArray(typeof(byte));` 
1

Vous pourriez jeter un oeil à la classe BitConverter, qui est conçue pour convertir les types de base en tableaux d'octets.

http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx

Mais je ne suis pas sûr de ce que vous cherchez des conseils pour placer les éléments dans votre tableau. Array.Copy peut travailler pour simplement copier les octets, mais peut-être que je suis malentendu.

Questions connexes