gpt4 book ai didi

将带有前导零的二进制字符串转换为十六进制字符串

转载 作者:行者123 更新时间:2023-11-30 15:28:13 25 4
gpt4 key购买 nike

我将从文本文件中读取代码(二进制),其中包含“000101”或“100010”等数据。然后我将 2 位与这个二进制字符串进一步连接起来。我在处理前导零时遇到问题,我无法跳过。我一直在尝试首先将二进制字符串转换为 int (使用 atoi()),然后转换为十六进制字符串。但是如果我使用该函数,则带有前导零,它会截断前导零。我在这里搜索过,但给出的解决方案不是C语言的。有没有直接的方法可以做到这一点,或者我必须跟踪一切?提前致谢。这是我的函数,它将 int 作为输入,然后将其转换为十六进制字符串

void toHex(int n, char str[]) /* Function to convert binary to hexadecimal. */
{
int i=0,decimal=0, rem;
char temp[2];
while (n!=0)
{
decimal += (n%10)*pow(2,i);
n/=10;
++i;
}

/* At this point, variable decimal contains binary number in decimal format. */
i=0;
while (decimal!=0)
{
rem=decimal%16;
switch(rem)
{
case 10:
str[i]='A';
break;
case 11:
str[i]='B';
break;
case 12:
str[i]='C';
break;
case 13:
str[i]='D';
break;
case 14:
str[i]='E';
break;
case 15:
str[i]='F';
break;
default:
str[i]=rem+'0';
break;
}
++i;
decimal/=16;
}
str[i]='\0';
strrev(str); // Function to reverse string.
if(strlen(str)==1)
{
temp[0] = '0';
temp[1] = str[0];
temp[2] = '\0';
strcpy(str,temp);
}
else if(strlen(str)==0)
{
temp[0] = '0';
temp[1] = '0';
temp[2] = '\0';
strcpy(str,temp);
}
}

最佳答案

  1. 获取二进制位数(调用atoi之前)

    size_t binlen = strlen(input);
  2. 获取要输出的十六进制位数(只是 binlen/4 四舍五入)

    size_t hexlen = ((binlen % 4 ? binlen+4 : binlen) / 4);
  3. 将整数打印为十六进制,并带有正确数量的前导零

    sprintf(str, "%0.*x", hexlen, n);

    注意。您确实应该传递输出缓冲区的长度,并使用 snprintf 代替...

关于将带有前导零的二进制字符串转换为十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com