min:6位 res1:1位 iv:1位
结构中的所有内容看起来都很棒,但我没有得到预期的结果!
struct cp56time2a
{
internal byte cp56time2a_data1;
public byte min
{
get { return (byte)(cp56time2a_data1 & 0x3f); }
set { cp56time2a_data1 = (byte)((cp56time2a_data1 & ~0x3f) | (value & 0x3f)); }
} //min :6; 0..59
public byte res1
{
get { return (byte)((cp56time2a_data1 >> 6) & 0x01); }
set { cp56time2a_data1 = (byte)((cp56time2a_data1 & ~(0x01 << 6)) | (value & 0x01) << 6); }
}
public byte iv
{
get { return (byte)((cp56time2a_data1 >> 7) & 0x01); }
set { cp56time2a_data1 = (byte)((cp56time2a_data1 & ~(0x01 << 7)) | (value & 0x01) << 7); }
}
}
我试图将此值分配给每个结构字段:0x55 = 0 1 010101
简单测试代码:
T.min = 0x55 ;
Console.WriteLine("min = {0}", T.min);
Console.WriteLine("res1 = {0}", T.res1);
Console.WriteLine("iv = {0}", T.iv);
Console.WriteLine("cp56time2a_data1 = {0}",T.cp56time2a_data1);
T.res1 = 0x55 ;
Console.WriteLine("min = {0}", T.min);
Console.WriteLine("res1 = {0}", T.res1);
Console.WriteLine("iv = {0}", T.iv);
Console.WriteLine("cp56time2a_data1 = {0}", T.cp56time2a_data1);
T.iv = 0x55 ;
Console.WriteLine("min = {0}", T.min);
Console.WriteLine("res1 = {0}", T.res1);
Console.WriteLine("iv = {0}", T.iv);
Console.WriteLine("cp56time2a_data1 = {0}", T.cp56time2a_data1);`
预计会显示:min =21 || res1 = 1 || iv = 0
结构的内部字节行为不端。你的想法请!!
答案 0 :(得分:1)
对于两个属性res1
和iv
,您有:value & 0x01
换句话说,您只获取分配给这些属性的值的最低位。
同样,当您阅读这些属性时,请执行以下操作:& 0x01
。因此很明显,这些属性旨在读取和写入一位,即它们是0
或1
。