在C语言中转换为十六进制数的字符串中的二进制位模式

在C语言中转换为十六进制数的字符串中的二进制位模式,c,hex,bits,C,Hex,Bits,我是C语言的新手,我有一个问题需要帮助 假设我有一个包含32位模式的字符串,例如“100011001101000101011100111000000” 我遇到的问题是如何为字符串中的位模式创建一个十六进制数,以便该数包含4位的组 例如,我要求上面字符串的十六进制表示形式为8CD159C0 char *bin="10001100110100010101100111000000"; char *a = bin; int num = 0; do { int b = *a=='1'?1:0;

我是C语言的新手,我有一个问题需要帮助

假设我有一个包含32位模式的字符串,例如“100011001101000101011100111000000”

我遇到的问题是如何为字符串中的位模式创建一个十六进制数,以便该数包含4位的组

例如,我要求上面字符串的十六进制表示形式为8CD159C0

char *bin="10001100110100010101100111000000";
char *a = bin;
int num = 0;
do {
    int b = *a=='1'?1:0;
    num = (num<<1)|b;
    a++;
} while (*a);
printf("%X\n", num);
char*bin=“1000110011010000101011100111000000”;
char*a=bin;
int num=0;
做{
INTB=*a=='1'?1:0;
num=(num试试看:

char *bin="10001100110100010101100111000000";
char *a = bin;
int num = 0;
do {
    int b = *a=='1'?1:0;
    num = (num<<1)|b;
    a++;
} while (*a);
printf("%X\n", num);
char*bin=“1000110011010000101011100111000000”;
char*a=bin;
int num=0;
做{
INTB=*a=='1'?1:0;

num=(num您可以使用
strtoul()
将二进制字符串转换为数字,使用基数2:

char *bits = "10001100110100010101100111000000";
unsigned num = strtoul(bits, NULL, 2);
然后使用
snprintf()
将数字转换为十六进制字符串:

(这假设
unsigned int
在您的平台上至少有32位。
否则使用无符号长字符串

您可以使用
strtoul()
,使用基数2将二进制字符串转换为数字:

char *bits = "10001100110100010101100111000000";
unsigned num = strtoul(bits, NULL, 2);
然后使用
snprintf()
将数字转换为十六进制字符串:

(这假设
unsigned int
在您的平台上至少有32位。
否则,使用无符号长

Yosi几乎得到了它。但它实际上应该是一个无符号整数

char *bin="10001100110100010101100111000000";
unsigned int num = 0;
for (char *a = bin; *a; ++a)
    num = (num << 1) | (*a - '0');
printf("%X\n", num);
char*bin=“1000110011010000101011100111000000”;
无符号整数num=0;
对于(char*a=bin;*a;++a)

num=(numYosi几乎得到了它。但它应该是一个无符号int

char *bin="10001100110100010101100111000000";
unsigned int num = 0;
for (char *a = bin; *a; ++a)
    num = (num << 1) | (*a - '0');
printf("%X\n", num);
char*bin=“1000110011010000101011100111000000”;
无符号整数num=0;
对于(char*a=bin;*a;++a)
num=(num
#包括
#包括
#包括
//#定义b2i(c)(c=='1'?1:0)
#定义I(c)c-“0”
字符表[2][2][2][2]={
'0','1','2','3','4','5','6','7',
‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’
};
字符*bin2hex(常量字符*binstr){
尺寸长度=strlen(binstr);
大小\u t r=len%4;//len&3
大小加长度=(4-r)%4;
len+=添加_len;
char*bin=malloc(len+1);
strncpy(bin,“0000”,add_len);//规范化
strcpy(bin+add_len,binstr);
大小为十六进制=len/4;//len>>2;
char*hextr=malloc(十六进制+1);
尺寸b,h;
对于(h=b=0;b
#包括
#包括
#包括
//#定义b2i(c)(c=='1'?1:0)
#定义I(c)c-“0”
字符表[2][2][2][2]={
'0','1','2','3','4','5','6','7',
‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’
};
字符*bin2hex(常量字符*binstr){
尺寸长度=strlen(binstr);
大小\u t r=len%4;//len&3
大小加长度=(4-r)%4;
len+=添加_len;
char*bin=malloc(len+1);
strncpy(bin,“0000”,add_len);//规范化
strcpy(bin+add_len,binstr);
大小为十六进制=len/4;//len>>2;
char*hextr=malloc(十六进制+1);
尺寸b,h;

对于(h=b=0;bI忘了添加我需要将十六进制数存储为字符串。我该怎么做?请解释第5行和第6行好吗?我忘了添加我需要将十六进制数存储为字符串。我该怎么做?请解释第5行和第6行好吗?