мин: 6 бит res1: 1 бит IV: 1 битБитовые поля шалить в структуре C#
Все в структуры выглядит здорово, но я не получить ожидаемый результат!
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
Внутренний байт структуры является неправильным. ВАШИ ИДЕИ ПОЖАЛУЙСТА!
Какой смысл делать 'res1' и' iv' 'byte' вместо' bool'? Может только когда-либо представлять '1' или' 0'. Присвоение им '0x55' вводит в заблуждение. – Rotem
Все результаты верны. Ничего плохого. Можете ли вы объяснить, почему вы считаете, что они неправы? Почему вы ожидаете, что он покажет, что res1 = 1 ** до ** вы назначаете res1? Вы никогда ничего не назначаете, чтобы он оставался нолем! Когда вы что-то присваиваете ему - младший бит 0x55 - он изменяется на 1. –
@Rotem у меня есть тонны байтов для чтения из буферов, и я не хочу делать маски и перемещаться внутри функций. Кроме того, у меня есть подобные структуры, которые состоят из нескольких 1 | 2 | 3 | 4 | 5 бит (-ов) последовательности: так что я не усложняю вещи .. –