На данный вопрос уже ответили:
Помогите разобраться, что значит
:
В переменной ниже приведу структуру на С++ Builder:
typedef struct {
unsigned int nr:8; //
unsigned int y:8; // 1
unsigned int sm:3; // 2
unsigned int d:5; // 3
unsigned int m:4; // 4
unsigned int r:4; // 5
} n_def;
Что именно значит число после :
? nr:8
или 3
или 5
..... и т.д.?
И как тоже самое реализовать на C#?
Дело в том что мне нужно прочитать данные из бинарного файла, и как я понял мне для начала нужно прочитать весь блок а затем разбить его на биты ? в C# чтение производиться так:
using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
{
// пока не достигнут конец файла
// считываем каждое значение из файла
while (reader.PeekChar() > -1)
{
int numb = reader.ReadInt32();
uint nr = reader.ReadUInt32(); // переменная которую нужно разбить на биты
}
}
Я правильно понял ? как правильнее реализовать ? может лучше использовать маршалинг ? Спасибо за ваши ответы
Двоеточие применяется для того, чтобы указать размер переменной в битах. Такая запись работает только внутри структур, где несколько небольших значений из 2-х или 3-х бит могут быть слиты в одну 16, 32 или 64-хбитовую целую переменную.
В вашем примере все переменные поместятся в 32-хбитовое целое число. В действительности это и будет одна целая переменная, а компилятор сгенерирует вам код для доступа к отдельным битам.
На C#, как и в C++ вместо такой записи часто применяют прямую манипуляцию битами. Например, чтобы выделить три бита, начиная с пятого, вы делаете так:
var y = (x >> 4) & 0x07;
Сначала вы сдвигаете число на 4 бит вправо, теряя младшие 4 бита. Затем накладываете маску 000001112, стирая старшие 5 бит и оставляя младшие 3. В результате вы получаете три бита: пятый, шестой и седьмой.
Чтобы установить эти биты вы можете сначала стереть их, а затем применить операцию ИЛИ:
var y = (y & 0x8F) | (x << 4);
Здесь 0x8F это 100011112, а х содержит новое значение для этих 3-х бит.
Впрочем, в C# есть структура BitVerctor32, которая поможет работать с отдельными битами или группами бит.
Для резюме хочу сделать простой сайт на mvc с отзывами, админпанелью
Проблема заключается в лимитах хостинга на чтение/запись, и при загрузке от 100 файлов(фоток) за раз, сервер упирается в лимиты и сбрасывает...
Добавляю в файлenv новое значение, как его получить в шаблоне или контроллере?