例如将字符串“01000001”转为0x41, 如果字符串不是8的整数倍,二进制地位补0。
#include <stdio.h>
#include <stdlib.h>
void str_bin_to_u8(const char *str, int len, unsigned char *data)
{
int i = 0;
unsigned char and_bit[] = {0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE};
unsigned char or_bit[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
for (i = 0; i < len; i++) {
if ('0' == str[i])
data[i/8] &= and_bit[i%8];
else
data[i/8] |= or_bit[i%8];
}
}
int main(int argc, char **argv)
{
int i = 0;
char str_bin_buf[] = "0100000100111010011010101010111100";
int len = sizeof(str_bin_buf)/sizeof(str_bin_buf[0]);
unsigned char *data = (unsigned char *)calloc(1, (len + 7)/8);
printf("input is %s\n", str_bin_buf);
printf("input len is %d\n", len);
for (i = 0; i < len; i++) {
if (0 == i % 8)
printf(" ");
printf("%c", str_bin_buf[i]);
}
printf("\n");
str_bin_to_u8(str_bin_buf, len - 1, data);
for (i = 0; i < (len + 7)/8; i++)
printf("0x%x ", data[i]);
printf("\n");
if (data)
free(data);
return 0;
}