Кодирование … некоторый вид?

Ваш класс Malicious вообще не определил никакого конструктора, и из документов MSDN по использованию конструкторов

Если класс не является статическим, классы без конструкторы получают открытый конструктор по умолчанию от компилятора C #, чтобы включить создание экземпляров класса.

Это означает, что ваш класс имеет:

public class Malicious : MaliciousSmall
{
   public Malicious()
   {
   }
}

Из той же ссылки MSDN

В производном классе, если базовый Конструктор класса не вызывается явно с помощью ключевого слова base, конструктор по умолчанию, если он есть, называется неявно .

Это фактически означает:

   public Malicious() :base() //implicitly calling base class constructor

Так как ваш базовый класс не имеет конструктора по умолчанию (без параметра) , вы получите ошибку.

Теперь у вас есть две возможности исправить эту ошибку.

  1. Определите конструктор по умолчанию в вашем базовом классе.
  2. Явно вызовите базовый конструктор из вашего производного класса.

Вероятно, для вашей ситуации лучше вызывать базовый конструктор явно, поскольку оба конструктора получают один и тот же параметр типа. Вы можете сделать:

public Malicious(DataRow row) :base(row)

5
задан Blumer 20 May 2009 в 19:00
поделиться

3 ответа

использовать операторы битового сдвига в сочетании с побитовыми операторами И и ИЛИ ...

предполагая 32-битное беззнаковое:

int value = 303;
int result = 0x00000000;

for (int i = 0; i < 4; i++)
{
    result = result | ((value & (0xFF << (i * 8))) << (24 - (i * 8)));
}
2
ответ дан 15 December 2019 в 01:10
поделиться

Big-endian и little-endian относятся к порядку байтов в памяти. Такое значение, как 0x2f100000, не имеет внутреннего порядка байтов, порядок байтов зависит от архитектуры ЦП.

Если вы всегда хотите изменить порядок байтов в 32-битном значении, используйте код, опубликованный Деми.

Если вы всегда хотите изменить порядок байтов в 32-битном значении. хотите получить определенный порядок байтов (потому что вы готовитесь передать эти байты по сети или сохранить их в файл на диске), используйте что-нибудь еще. Например, в библиотеке сокетов BSD есть функция htonl (), которая берет собственное 32-битное значение вашего процессора и помещает его в порядок прямого байта.

Если вы работаете на машине с прямым порядком байтов, htonl (303) == 0x2f100000. Если вы работаете на машине с прямым порядком байтов, htonl (303) == 303. В обоих случаях результат будет представлен байтами [0x00, 0x00, 0x01, 0x2f] в памяти.

2
ответ дан 15 December 2019 в 01:10
поделиться

Если кто-нибудь может указать конкретный термин для того, что я пытался сделать, я все равно хотел бы его услышать. Однако я нашел способ сделать то, что мне было нужно, и я отправлю его здесь, чтобы, если кто-нибудь придет за мной, они могут его найти. Может быть (возможно, есть) более простой и прямой способ сделать это, но вот что я в итоге сделал в VB.Net, чтобы вернуть желаемый байт-код:

Private Function Encode(ByVal original As Integer) as Byte()    
    Dim twofiftysixes As Integer = CInt(Math.Floor(original / 256))
    Dim sixteens As Integer = CInt(Math.Floor((original - (256 * twofiftysixes)) / 16))
    Dim ones As Integer = original Mod 16
    Dim bytecode As Byte() = {CByte((16 * sixteens) + ones), CByte(twofiftysixes), 0, 0}
    Return bytecode
End Function

Фактически разбив целое число на его шестнадцатеричные компоненты, затем преобразование соответствующих пар в cBytes.

0
ответ дан 15 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: