Учитывая Byte
(например, 0x49), я хочу изменить старший полубайт с 4
на 7
.
То есть:
0x49
→ 0x79
Я пробовал следующее:
Byte b = 0x49;
b = 0x70 | (b & 0x0f);
Но он не компилируется:
Ошибка компиляции: не может быть неявно преобразовать тип int в byte. Существует явное преобразование (отсутствует ли приведение?)
Что я делаю не так?
CMRE
using System;
public class Program
{
public static void Main()
{
//The goal is to change the high nibble of 0x49 from 4 to 7. That is 0x49 ==> 0x79
Byte b = 0x49;
b = b & 0x0f;
b = 0x70 | b;
Console.WriteLine(b.ToString());
}
}
https://dotnetfiddle.net/V3bplL
Я пробовал отливать каждую деталь, которую могу найти, как (Byte)
, но она все равно жалуется. И вместо того, чтобы стрелять из жесткой пушки по коду и надеяться, что что-то прилипнет, я решил, что получу правильный ответ.
Вот почему пример кода не содержит (Byte)
приведений:
- в этом нет необходимости
- Я хочу, чтобы кто-то еще объяснил мне, где именно, и именно почему , это или они это или необходимы
Отсюда легко щелкнуть ссылку dotnetfiddle
. Люди могут попробовать это для себя, добавить (Byte)
приведение, увидеть, что он не компилируется, go «Ха» , и попробовать добавить больше приведения в случайном порядке.
Для тех, кто этого не сделал. Не прочитал
Для педантов, которые не удосужились попробовать:
Byte b = (Byte)0x49;
b = ((Byte)0x70) | ((Byte)(((Byte)b) & ((Byte)((Byte)0x0f))));
тоже не сработает.