我在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字节,因为这时消息被解释错误)。
转换数字并将字节数组放在上述位置的最佳方法是什么?
答案 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));`