我有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字节流做
答案 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
**