需要设置一个字节[]

时间:2010-10-19 20:51:58

标签: c# parsing

目标是得到一个字节[16],其中第一个元素是十六进制值55,第二个元素是十六进制值AA。其他14个是十六进制值0.

我试过

byte[] outStream = System.Text.Encoding.UTF8.GetBytes("55 AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00");

但是这会使用ascii值填充byte [],而不是十六进制值。

我试过

  byte[] outStream = new byte[16];
  outStream[0] = byte.Parse("55");
  outStream[1] = byte.Parse("AA");
  for(int i=2; i<16; i++)
  {
    outStream[i] = byte.Parse("00");
  }

但这也不起作用。它不提供十六进制值,而是在AA上崩溃的整数值,因为它不是可解析的int。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:12)

您可以在C#中使用0x:

作为前缀来编写十六进制整数文字
byte[] result = new byte[16];
result[0] = 0x55;
result[1] = 0xaa;

默认情况下,字节数组填充0x00,因此您只需设置前两个元素。

或者,您可以使用数组初始化语法:

byte[] result = new byte[] { 0x55, 0xaa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

答案 1 :(得分:2)

您可以使用:byte.Parse(hex_byte_string, System.Globalization.NumberStyles.HexNumber);
或者您也可以使用:Convert.ToByte(hex_byte_string, 16);

public static byte[] ToByteArray(String HexString)
{
   string hex_no_spaces = HexString.Replace(" ","");
   int NumberChars = hex_no_spaces.Length;
   byte[] bytes = new byte[NumberChars / 2];
   for (int i = 0; i < NumberChars; i+=2)
   {
      bytes[i / 2] = byte.Parse(hex_no_spaces.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
   }
   return bytes;
}

并像这样使用它:

byte[] bytez = ToByteArray("55 AA 00 00 00 00 00 00 00 00 00 00 00 00 00 00");

答案 2 :(得分:2)

byte[] result = { 0x55, 0xaa, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };