Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!
  • Go

Idiom #275 Binary digits to byte array

From the string s consisting of 8n binary digit characters ('0' or '1'), build the equivalent array a of n bytes.
Each chunk of 8 binary digits (2 possible values per digit) is decoded into one byte (256 possible values).

import "strconv"
n := len(s) / 8
a := make([]byte, n)
for i := range a {
	b, err := strconv.ParseInt(s[i*8:i*8+8], 2, 0)
	if err != nil {
		log.Fatal(err)
	}
	a[i] = byte(b)
}

bytes are unsigned in Go (byte is an alias for uint8)

Consider handling the error appropriately, in case s is malformed.
#include <stdlib.h>
#include <string.h>
unsigned char *a = calloc(strlen(s) / 8, 1);
for(int i = 0; i < strlen(s); ++i){
  a[i / 8] |= (s[i] == '1') << (7 - i % 8);
}

If s is not 8n characters long or contains characters orher than '0' and '1', correct behavior is not guaranteed.

New implementation...
< >
programming-idioms.org