Я еще не могу прокомментировать, но недостаточно, но Lior смешивает Java с C# в очень неправильном ответе.
байт в C# является неподписанным байтом, который является полной противоположностью всем другим целым числам в C#, которые по умолчанию подписаны.
Часть 0xFF совершенно бессмысленна, потому что даже если байт был подписан, 0xFE, например, -2. Например, использование побитового и с 0xFE и 0xFF не приведет к отрицательному числу 0xFE. 0x7F.
Что касается верхнего ответа, я уверен, что эти микро-оптимизации могут помочь, хотя они и являются микро-оптимизациями, которые вряд ли будут иметь какое-либо значение, поскольку компилятор JIT может просто сделать что-то еще и потому что компьютеры просто слишком быстро растут.
chars[2 * i + 2] = ToHexDigit(bytes[i]/16);
chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
Небольшое изменение, позволяющее использовать битдвиг и побитовые операционные системы вместо делителя и модуля.
chars[2 * i + 2] = ToHexDigit((bytes[i] >> 4) & 0xF);
chars[2 * i + 3] = ToHexDigit(bytes[i] & 0xF);
Это еще одна «оптимизация», хотя я считаю ее более читаемой. Возможно, это потому, что я наизусть знаю таблицу ASCII.
private static char ToHexDigit(int i)
{
return (char)(i + (i < 10 ? 48 : 55));
}
Если вы пытаетесь достичь строчного шестигранника (без TOLOWER), просто поменять местами 55 с 87. Это делает его довольно просто.
Обновление: похоже, Лиор или кто-то удалил свой очень ответ. Это был хороший шаг.
Почему нижняя сторона? BTW csharp-online.net имеет некоторые v. Классные вещи .. – russau
ссылка сейчас мертва. – Yablargo