diff options
-rw-r--r-- | lib/byte.go | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/byte.go b/lib/byte.go index 48f3a38..fbdfae9 100644 --- a/lib/byte.go +++ b/lib/byte.go @@ -43,3 +43,25 @@ func ByteIsUpper(b byte) bool { func BytesEqual(a, b []byte) bool { return BlocksEqual(a, b) } + +func BytesToUint32s(bs []byte) []uint32 { + u32s := make([]uint32, 0) + + ui := uint32(0) // 32-bit word. + ab := uint(32) // Available bits in ui. + for _, b := range bs { + if ab == 0 { + // ui full; add to u32s and reset ui. + u32s = append(u32s, ui) + ui = uint32(0) + ab = 32 + } + // Stuff byte into ui. + ui = ui | uint32(b)<<(ab-8) + ab = ab - 8 + } + if ui > 0 { + u32s = append(u32s, ui) + } + return u32s +} |