Я пытаюсь сохранить два байта в ushort. Таким образом, первые 8 бит — это первое значение, а 8 последних бит — последнее. У меня почти все работает, но эта ошибка в строке 20, где я немного сдвигаю:
Severity Code Description Project File Line Suppression State
Error CS0266 Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?) Bit Stuff C:\Users\perqj\Dropbox\GM\Bit Stuff\Bit Stuff\Form1.cs 42 Active
Вот код:
byte val1 = 1;
byte val2 = 1;
byte[] val = new byte[2];
val[0] = val1;
val[1] = val2;
ushort asShort = BitConverter.ToUInt16(val, 0);
ushort mask1 = 0x00ff; //0b_0000_0000_1111_1111 Haven't tried, yet
ushort mask2 = 0xff00; //0b_1111_1111_0000_0000 Haven't tried, yet
ushort short1 = asShort;
ushort short2 = asShort;
ushort byteShift = 8;
short1 &= mask1;
short2 &= mask2;
short2 = short2 >> byteShift;
string binaryMask1 = Convert.ToString(mask1, 2);
string binaryMask2 = Convert.ToString(mask2, 2);
string binaryShort1 = Convert.ToString(short1, 2);
string binaryShort2 = Convert.ToString(short2, 2);
listBox1.Items.Add("val1: " + val1);
listBox1.Items.Add("val2: " + val2);
listBox1.Items.Add("Short: " + asShort);
listBox1.Items.Add("mask1: " + mask1 + " " + binaryMask1);
listBox1.Items.Add("mask2: " + mask2 + " " + binaryMask2);
listBox1.Items.Add("val1: " + short1 + " " + binaryShort1);
listBox1.Items.Add("val2: " + short2 + " " + binaryShort2);
int
, но, как говорит ошибка, вы можете добавить приведение:short2 = (ushort) (short2 >> byteShift);
Вы можете обнаружить, чтоshort2 >>= byteShift;
тоже работает - это эквивалентно, только с неявным приведением. - person Jon Skeet   schedule 22.02.2021