Comment puis-je combiner les 4 octets en une 32 bits entier non signé?
Je suis en train de convertir 4 octets en une 32 bits entier non signé.
J'ai pensé que peut-être quelque chose comme:
UInt32 combined = (UInt32)((map[i] << 32) | (map[i+1] << 24) | (map[i+2] << 16) | (map[i+3] << 8));
Mais cela ne semble pas fonctionner. Ce qui me manque?
Vous devez vous connecter pour publier un commentaire.
Quarts de travail sont tous de 8. Maj le 24, 16, 8 et 0.
map[n]
est à seulement 8 bits, pourquoi un changement de plus de 8 n'est pas effacer complètement.int
s au minimum, ils ont donc mis unbyte
ou unshort
dans unint
et puis faire la maj. Si la valeur est déjà unlong
, il n'est pas diminuer la taille.ushort
convertit également àint
plutôt queuint
.long l = (uint)255 << 24
etlong l = 255 << 24
ont des résultats très différents.Utiliser le BitConverter classe.
Plus précisément, cette surcharge.
<<
toujours des décalages de bits "supérieur", et>>
déplace "inférieur".if (IsLittleEndian) { return (((numRef[0] | (numRef[1] << 8)) | (numRef[2] << 0x10)) | (numRef[3] << 0x18)); } return ((((numRef[0] << 0x18) | (numRef[1] << 0x10)) | (numRef[2] << 8)) | numRef[3]);
BitConverter.ToInt32()
Vous pouvez toujours faire quelque chose comme ceci:
Mais ce serait à réinventer la roue, comme c'est en fait la façon dont
BitConverter.ToInt32()
est mis en œuvre.