2017-08-29 4 views
-2

Hallo Jungs, ich diese Funktion in golang hat einen 24-Bit-int (3 Byte) zu einem 32-Bit-int zu werfen (4 Byte)golang Int24 zu Int32

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

Ich möchte wissen, ob dies ein schlecht Lösung für das Problem. Vielleicht kann jemand mich zu einer besseren und effizienten Lösung führen

Antwort

4

Ihre Lösung ist sehr lesbar, macht was Sie wollen, und ist schnell genug.

Wenn Sie es machen wollen schneller Sie das Bit nur tun können, Verschieben und ODER-Verknüpfung selbst,

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

Dies hat keine Zuweisungen, und wie die Standard-Bibliothek Kontrolle Grenzen nicht tun. Es ist auch ein paar Größenordnungen schneller als die Verwendung von Binär-Paket, aber wir sprechen Nanosekunden, also, ob es der Treffer zur Lesbarkeit wert ist, ist wirklich die Frage.

+0

Vielen Dank für Ihre Antwort. Ihre Antwort ist sehr hilfreich für mich. Ps: sry für mein Englisch –

Verwandte Themen