Pergunta

Eu quero converter long para int.

Se o valor de long > int.MaxValue, Fico feliz em deixá -lo envolver.

Qual é a melhor maneira?

Foi útil?

Solução

Apenas faça (int)myLongValue. Fará exatamente o que você deseja (descartando MSBs e tomando LSBs) em unchecked contexto (que é o padrão do compilador). Vai jogar OverflowException dentro checked contexto se o valor não se encaixa em um int:

int myIntValue = unchecked((int)myLongValue);

Outras dicas

Convert.ToInt32(myValue);

Embora eu não saiba o que fará quando for maior que o Int.MaxValue.

Às vezes você não está realmente interessado no valor real, mas em seu uso como soma de verificação/hashcode. Nesse caso, o método interno GetHashCode() é uma boa escolha:

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();

A maneira mais segura e rápida é usar o mascaramento de bits antes do elenco ...

int MyInt = (int) ( MyLong & 0xFFFFFFFF )

A máscara de bits ( 0xFFFFFFFF ) O valor dependerá do tamanho do int, porque o tamanho int depende da máquina.

Não

(int) Math.Min(Int32.MaxValue, longValue)

Seja o caminho correto, matematicamente falando?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top