Как сделать ajax запрос с токеном подделки в mvc

поведение стиля reinterpret_cast

Если вы выполняете манипуляции с битами, это может быть невероятно полезно

, многие реализации высокопроизводительных хэш-кодов используют UInt32 для хеш-значения (это упрощает смену). Поскольку .Net требует Int32 для метода, который вы хотите быстро преобразовать uint в int. Поскольку не имеет значения фактическое значение, только то, что все биты в значении сохранены, требуется реинтерпрет.

public static unsafe int UInt32ToInt32Bits(uint x)
{
    return *((int*)(void*)&x);
}

отмечает, что именование моделируется на BitConverter.DoubleToInt64Bits

Продолжая в хешинговой вене, преобразование структуры на основе стека в байт * позволяет легко использовать хэш-функции байта:

// from the Jenkins one at a time hash function
private static unsafe void Hash(byte* data, int len, ref uint hash)
{
    for (int i = 0; i < len; i++)
    {
        hash += data[i];
        hash += (hash << 10);
        hash ^= (hash >> 6);
    }
}

public unsafe static void HashCombine(ref uint sofar, long data)
{
    byte* dataBytes = (byte*)(void*)&data;
    AddToHash(dataBytes, sizeof(long), ref sofar);
}

также небезопасно (от 2.0 и далее) позволяет использовать stackalloc. Это может быть очень полезно в ситуациях с высокой производительностью, когда необходим небольшой массив переменной длины, такой как временное пространство.

Все эти применения были бы крепко в «только если ваше приложение действительно нуждается в производительности» и, следовательно, неприменим для общего использования, но иногда вам это действительно нужно.

исправлено, если вы хотите взаимодействовать с некоторой полезной неуправляемой функцией (их много), которая принимает c-style массивы или строки. Таким образом, это не только по соображениям производительности, но и по правильности в сценариях взаимодействия.

24
задан Erik Philips 6 November 2013 в 07:19
поделиться