J'ai des opérations d'image / de texture de faible niveau où les couleurs 32 bits sont stockées comme UINT32 ou INT et j'ai besoin d'une conversion bit dans le sens très rapide entre les deux.
EG P>
int color = -2451337; //exception UInt32 cu = (UInt32)color;
3 Réponses :
BitConverter.ToUInt32(BitConverter.GetBytes(-2451337), 0)
+1 pour compenser le bowvote. Même avant mon édition, il n'y avait rien d'importance vitale qui ne va pas avec cette réponse. En fait, ce serait la méthode privilégiée si vous utilisez VB puisque les moulages directs de Int32 aux UINT32 et les contextes granulés non cochés ne sont pas autorisés.
Comment cela se compare-t-il dans la performance avec quelque chose comme Utivalue = Cuint (Intvalue & 0xFFFFFFFFF &)?
int color = -2451337; unchecked { uint color2 = (uint)color; // color2 = 4292515959 }
Ceux qui utilisent une langue comme VB, qui n'ont pas un moyen vraiment pratique de désactiver les contrôles de débordement pendant la conversion, pourraient utiliser quelque chose comme: ou p>
Shared Function unsToSign(ByVal val As UInt64) As Int64
Return CLng(val And &H7FFFFFFFFFFFFFFFUL) + (CLng(-((val And &H8000000000000000UL) >> 1)) << 1)
End Function
Shared Function signToUns(ByVal val As Int64) As UInt64
Return CULng(val And &H7FFFFFFFFFFFFFFF) + (CULng(-((val And &H8000000000000000) >> 1)) << 1)
End Function