Более быстрый способ подкачать порядок байтов в C# со словами на 16 битов

ESC gg=G, чтобы повторно расположить код с отступом и :retab для преобразования вкладок в пробелы или пробелы к вкладкам был тем, что сцепило меня с энергией. Таким образом, на самом деле Вы не должны быть вынуждены использовать его, просто необходимо изучить, когда это может помочь Вам увеличить свою скорость.

Проходят vimtutor.

Начинают использовать энергию для простого редактирования, как файлы конфигурации или HTML. Изучите команды, поскольку Вам нужны они.

Поиск Google для хорошего .vimrc, используемого кем-то, кто использует набор инструментальных средств, который напоминает Ваш. Включите подсветку синтаксиса. Найдите хорошую цветовую схему.

Изучают макросы, потому что Vim является лучшим для автоматизированных задач и вставки отрывка, как форматирование нескольких слов в сложный XML-тэг или преобразование CSV к HTML-таблице.

10
задан Robert Harvey 30 October 2013 в 20:08
поделиться

2 ответа

Этот способ выглядит немного быстрее, чем метод в исходном вопросе:

private static byte[] _temp = new byte[0];
public static void Swap(byte[] data)
{
    if (data.Length > _temp.Length)
    {
        _temp = new byte[data.Length];
    }
    Buffer.BlockCopy(data, 1, _temp, 0, data.Length - 1);
    for (int i = 0; i < data.Length; i += 2)
    {
        _temp[i + 1] = data[i];
    }
    Buffer.BlockCopy(_temp, 0, data, 0, data.Length);
}

При тестировании предполагалось, что метод вызывается повторно, поэтому изменение размера _temp массив не имеет значения. Этот метод основан на том факте, что половина перестановки байтов может быть выполнена с помощью первоначального вызова Buffer.BlockCopy (...) (со смещением исходной позиции на 1).

Пожалуйста, проверьте это сами, на случай, если я совсем сошла с ума. В моих тестах этот метод занимает примерно 70% от исходного метода (который я модифицировал, чтобы объявить байт b вне цикла).

6
ответ дан 3 December 2019 в 19:34
поделиться

Что ж, вы можете использовать трюк с заменой XOR , чтобы избежать промежуточного байта. Однако это не будет быстрее, и я не удивлюсь, если IL будет точно таким же.

for (int i = 0; i < data.Length; i += 2)
{
    data[i] ^= data[i + 1];
    data[i + 1] ^= data[i];
    data[i] ^= data[i + 1];
}
1
ответ дан 3 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

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