HEX到bit []数组(也称为bool [])

时间:2011-07-14 09:26:13

标签: c# arrays byte hex bit

我是c#的新手,我正在寻找关于2件事的一些想法。我已经看了很多答案,但没有找到我确切问题的答案。

  1. 我在for循环中有一个字节数组(称为BA),它本身保持覆盖,我无法将其作为整个数组打印出来。有没有办法将它导出到for循环之外(可能有不同的名称),以便我以后可以在程序中使用它?我只想要这样的东西:

    byte[] BA2 = {3 187,3 203,111 32, ...etc}; //(groups of 2bytes separated by commas).
    

    从原来的

    string hexValues = "03 BB,03 CB,6F 20,57 6F,72 6C,64 21";
    

    (并且还以位(布尔)表示此信息,因此{00000011 10111011,00000011 11001011,... etc})

  2. 我必须做的第二件事是将这两个字节移位4并使用FFF0应用AND门(这与将第一个字节* 1相乘,第二个字节乘以0xF0相同)。然后把它放在一个ushort [](无符号短数组)中,它以二进制格式保存转换后的字节,然后从那里将它转换回HEX。

  3. 我知道这可能不清楚(我的代码有点乱),而且相当复杂。但是我希望你们中的一些人能够帮助我。#/ p>

    到目前为止,这是我的代码,我已经在评论中添加了不起作用的位,因此代码运行。但我绝望地需要解决它们。

    class Program
    {
        static void Main(string[] args)
        {
    
            string hexValues = "03 BB,03 CB,6F 20,57 6F,72 6C,64 21";
            string[] hex2byte = hexValues.Split(',');
    
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine("\n2 byte String is: "+ hex2byte[j]);
                string[] hex1byte = hex2byte[j].Split(' ');
    
                for (int k = 0; k < 2; k++)
                {
                    Console.WriteLine("byte " + hex1byte[k]);
                    byte[] BA = StringToByteArray((hex1byte[k]));
    
                    //bool[] AA = BitConverter.ToBoolean(BA);           // I'm essentially stuck here. I need somehting which actually works.
    
                    //for (int i2 = 0; i2 < 2; i2++);                   // This is my attemp to perform de shift and AND.
                    //{
                    //    ushort[] X = new ushort[1];
                    //    X[0] = (ushort)((ushort)(BA[0] << 4) + (ushort)((BA[1] & 0xF0) >> 4));        // They have to be in this order: ((1stByte & 0xFF) << 4) + ((2byte & 0xF0) >> 4); first to the left then the right.
    
                    //}
    
                    Console.WriteLine("Converted " + BA[0]);
                }
            }
            //Console.WriteLine(BA[4]);               // it says: Does not exist in current context. Can it only b accesed in the for loop?
            Console.ReadKey();
    
        }   // Main method finishes.
    
    
        // Define StringToByteArray method.
        public static byte[] StringToByteArray(String hex)
        {
            int NumberChars = hex.Length;
            byte[] bytes = new byte[NumberChars / 2];
            for (int i = 0; i < NumberChars; i += 2)
            {
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
            }
            return bytes;
        }
    }
    

1 个答案:

答案 0 :(得分:0)

这是你在找什么?

string[] hexValues = new string[] { "03BB", "03CB", "6F20", "576F", "726C", "6421" };
ushort result = 0;
for (int i = 0; i < hexValues.Length; i++)
{
    Console.WriteLine("2 byte String is {0}", hexValues[i]);
    result = ushort.Parse(hexValues[i], NumberStyles.AllowHexSpecifier);
    Console.WriteLine("converted: {0}", result.ToString());
    Console.WriteLine("converted: {0}", result.ToString("x")); // "x" format in ToString -> very useful for creating hex strings.
}

对于你的转移你可以使用&lt;&lt;和&gt;&gt;运营商和|和&amp;用于按位操作。