我如何解密4字节数据相应地拆分它们并将它们分配给一个有意义的变量?

时间:2017-05-31 09:22:17

标签: c# bit-manipulation logical-operators

我有4个字节的数据流,我知道我想要分割它们并将它们分配给不同的变量。请记住,我收到的数据是十六进制格式。让我们说,

P_settings  4bytes   p_timeout  [6:0]
                    p_s_detected[7]

                    p_o_timeout [14:8]
                    p_o_timeout_set [15]

                    override_l_lvl  [23:16]
                    l_b_lvl [31:24]

以上P_settings是4个字节,我想把它们分成像p_timeout [6:0] requires 7 bits of those 4 byte.

这样的位

目前,我尝试的实现是......只有一个字节被分成比特。

 var soch = ((b_data>> 0)& 0x7F ); if i want first 7 bits

我如何为4字节流做

2 个答案:

答案 0 :(得分:2)

尝试这样的代码。你说输入是一个流。

    public class P_Settings
    {
        byte  p_timeout; //[6:0]
        Boolean p_s_detected; //[7]

        byte  p_o_timeout; // [14:8]
        Boolean p_o_timeout_set; // [15]

        byte override_l_lvl; //[23:16]
        byte l_b_lvl; //[31:24]

        public P_Settings(Stream data)
        {
            byte input = (byte)(data.ReadByte() & 0xff);
            p_timeout = (byte)(input & 0x7F);
            p_s_detected = (input & 0x80) == 0 ? false : true;

            input = (byte)(data.ReadByte() & 0xff);
            p_o_timeout = (byte)(input & 0x7F);
            p_o_timeout_set = (input & 0x80) == 0 ? false : true;

            override_l_lvl = (byte)(data.ReadByte() & 0xff);
            l_b_lvl = (byte)(data.ReadByte() & 0xff);
        }
    }

答案 1 :(得分:-1)

所以事实证明我认为它更容易.. 1)用单字节将它们分开并放入缓冲器和&单独操作它们,您将获得数据。感谢所有的支持。

**

                byte input = (byte)( buffer[10]);//1 byte
                var p_timeout = (byte)(input & 0x7F);
                var p_s_detected = (input & 0x80) == 0 ? false : true;

                 input = (byte)( buffer[11]);//1 byte
                var p_o_timeout = (byte)(input & 0x7F);
                var p_o_timeout_set = (input & 0x80) == 0 ? false : true;

                var override_l_lvl = (byte)(buffer[12] & 0xff);//1 byte
                var l_b_lvl = (byte)(buffer[13] & 0xff);  //1 byte

**