将int转换为byte数组并插入另一个数组

时间:2010-10-20 21:17:05

标签: c# wpf

我在c#wpf应用程序中工作,我想做几件事。我正在使用字节数组来组成MIDI Show Control消息(在MSC Specification 1.0中指定)。

此消息的结构是0x00字节就像消息的所有部分之间的逗号。我写了这样一条消息:

 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        


            };

我希望用户填写无符号整数(如215.5)并且我想将这些数字转换为字节(没有0x00字节,因为这时消息被解释错误)。

转换数字并将字节数组放在上述位置的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可能需要查看BitConverter类,该类旨在将基类型转换为字节数组。

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

但我不确定您要将物品放入阵列的指导方针。 Array.Copy可以简单地复制字节,但也许我会误解。

答案 1 :(得分:1)

发现它是这样的:

使用别人的转换器代码,如下所示:

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

然后我用它来转换整数:

byte[] mybytearray = VlqEncode(integer);

然后我创建了一个新的arraylist,我按顺序添加每个项目:

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

` 等等,直到我收到正确的信息。然后我只需要像这样转换一个字节数组:

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