У меня есть быстрая процедура на уровне бит, которая вычисляет значение и возвращает UInt32. Мне нужно сохранить это значение в SQL Server в 32-битном поле int. Я не хочу увеличивать размер поля и просто хочу сохранить «байты» из этой функции в поле int.Быстрое преобразование UInt32 в int в C#
Сотни этих записей запрашиваются одновременно, поэтому мне нужен самый быстрый способ преобразования UInt32 в int в цикле. Если самый левый бит установлен в UInt32, он должен установить бит знака int (или сделать что-нибудь «повторяемым», действительно, но бит знака, вероятно, будет проще всего).
Другими словами, я просто хочу, чтобы 4 байта UInt32 стали 4 байтами 32-битного int. Я мог бы использовать класс BitConverter, но я не уверен, что это самый быстрый способ. Будет ли это быстрее сделать это с непроверенной области, как это:
UInt32 fld = 4292515959;
unchecked {
return (int)fld;
// -2451337
}
я вижу обратный вопрос был здесь Спрашивается, а просто интересно, если ответ будет такой же идти другим путем:
Fastest way to cast int to UInt32 bitwise?
Это то же самое, вы можете думать о C# как C с проверками безопасности. Поэтому, если вы хотите, чтобы typecast без знака int int, просто используйте литье типов. Но сначала приложите его к неконтролируемому сигналу, чтобы компилятор не проверял ваше намерение, но это не привело бы к тому, что компилятор поднимет вам ошибку, что присвоение несовместимо, несовместимо, это означает, что точность перевода может быть потеряна при переводе (например, 4292515959 не то же самое, становятся отрицательными 2451337 (они одинаковы в перспективе компьютерного ученого [xkcd 541])) –
Спасибо, Майкл. Если бы вы не сделали этого комментария, я бы сразу проголосовал за это в качестве ответа. – Flipster