2017-08-29 3 views
-2

Salut les gars je l'ai écrit cette fonction dans golang pour jeter un entier de 24 bits (3 octets) à un int 32 bits (4 octets)golang INT24 à Int32

func int24ToInt32(bytes []byte) uint32 { 
    return binary.BigEndian.Uint32(append([]byte{0x00}, bytes...)) 
} 

Je veux savoir si cela est une mauvaise solution au problème. Peut-être que quelqu'un peut me guider vers une solution meilleure et efficace

Répondre

4

Votre solution est très lisible, fait ce que vous voulez, et est assez rapidement.

Si vous voulez faire plus vite vous pouvez juste faire le décalage de bits et vous-même OU binaire,

func int24ToInt32(bs []byte) uint32 { 
    return uint32(bs[2]) | uint32(bs[1])<<8 | uint32(bs[0])<<16 
} 

Cela n'a pas d'allocations, et ne fait pas la vérification des limites comme la bibliothèque standard. C'est aussi un couple d'ordres de grandeur plus rapide que d'utiliser un paquet binaire, mais nous parlons de nanosecondes, donc la question est de savoir si cela vaut la peine d'être lisible.

+0

Merci beaucoup d'avoir pris le temps de répondre, votre réponse est vraiment utile pour moi. Ps: sry pour mon anglais –