spacepaste

  1.  
  2. int dts(int x) {
  3. int n = 0;
  4. while(x /= 2) n++;
  5. return n;
  6. }
  7. unsigned char * bwrite(unsigned char * encoding) {
  8. // assume host byte size is CHAR_BIT
  9. if(strlen(encoding)%CHAR_BIT != 0) {
  10. printf("warning: bit length is not evenly divisible against a byte, the last byte may be corrupted\n");
  11. }
  12. size_t len = strlen(encoding)/CHAR_BIT;
  13. unsigned char * s = malloc(len);
  14. memset(s, 0, len);
  15. int i;
  16. for( i = 0; i < strlen(encoding); i++) {
  17. s[i>>dts(CHAR_BIT)] |= ( encoding[i] == '1' ? 1 : 0 ) >> ((CHAR_BIT-1)-(i)&(CHAR_BIT-1));
  18. }
  19. s[len] = 0;
  20. return s;
  21. }
  22.