github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/bytes/aligned.go (about) 1 package bytes 2 3 import "unsafe" 4 5 const ( 6 // Align4Mask for 4 bytes boundary 7 Align4Mask = 3 8 // Align8Mask for 8 bytes boundary 9 Align8Mask = 7 10 ) 11 12 // AlignedTo4 returns a byte slice aligned to 4 bytes boundary 13 func AlignedTo4(n uint32) []byte { 14 buf := make([]byte, int(n)+Align4Mask) 15 buf0Alignment := uint32(uintptr(unsafe.Pointer(&buf[0]))) & uint32(Align4Mask) 16 buf = buf[buf0Alignment : buf0Alignment+n] 17 return buf 18 } 19 20 // AlignedTo8 returns a byte slice aligned to 8 bytes boundary 21 func AlignedTo8(n uint32) []byte { 22 buf := make([]byte, int(n)+Align8Mask) 23 // return buf 24 buf0Alignment := uint32(uintptr(unsafe.Pointer(&buf[0]))) & uint32(Align8Mask) 25 buf = buf[buf0Alignment : buf0Alignment+n] 26 return buf 27 }