gpt4 book ai didi

c - C 中的 hexlify 和 unhexlify 函数

转载 作者:行者123 更新时间:2023-11-30 21:06:08 24 4
gpt4 key购买 nike

请帮忙...我正在尝试学习 C 类型转换。

此代码仅将一些十六进制字符转换为 1, 2, 3,效果很好。对于其他字符,也更改字符串或减少字符串长度,转换失败...

我将把代码放在下面...任何人都可以解释我代码哪里错了?

提前致谢!

#include <stdio.h>

int a2v(char c)
{
if ((c >= '0') && (c <= '9'))
{
return c - '0';
}
if ((c >= 'a') && (c <= 'f'))
{
return c - 'a' + 10;
}
else return 0;
}

char v2a(int c)
{
const char hex[] = "0123456789abcdef";
return hex[c];
}

char *unhexlify(char *hstr)
{
char *bstr = malloc((strlen(hstr) / 2) + 1);
char *pbstr = bstr;
for (int i = 0; i < strlen(hstr); i += 2)
{
*pbstr++ = (a2v(hstr[i]) << 4) + a2v(hstr[i + 1]);
}
*pbstr++ = '\0';
return bstr;
}

char *hexlify(char *bstr)
{
char *hstr = malloc((strlen(bstr) * 2) + 1);
char *phstr = hstr;
for (int i = 0; i < strlen(bstr); i++)
{
*phstr++ = v2a((bstr[i] >> 4) & 0xFF);
*phstr++ = v2a((bstr[i]) & 0xFF);
}
*phstr++ = '\0';
return hstr;
}

int main()
{
char *title = "... Trying to convert hex into binary string and back again ?! ...";
printf("%s\n\n", title);

char *input = "0123456789abcdef\0";
printf("Original: %s (%d)\n\n", input, (int)strlen(input));

char *input_bin = unhexlify(input);
printf("Bin: %s (%d)\n\n", input_bin, (int)strlen(input_bin));

char *input_hex = hexlify(input_bin);
printf("Hex: %s (%d)\n\n", input_hex, (int)strlen(input_hex));

system("pause");
return 0;
}

最佳答案

@Kevin 答案的更新版本:

int a2v(char c) {
if ((c >= '0') && (c <= '9')) return c - '0';
if ((c >= 'a') && (c <= 'f')) return c - 'a' + 10;
if ((c >= 'A') && (c <= 'F')) return c - 'A' + 10;
else return 0;
}

char v2a(int c) {
const char hex[] = "0123456789abcdef";
return hex[c];
}


char *hexlify(char *bstr) {
char *hstr=malloc((strlen(bstr)*2)+1);
bzero(hstr,(strlen(bstr)*2)+1);
char *phstr=hstr;
for(int i=0; i<strlen(bstr);i++) {
*phstr++ =v2a((bstr[i]>>4)&0x0F);
*phstr++ =v2a((bstr[i])&0x0F);
}
*phstr++ ='\0';
return hstr;
}
char *hexlifyn(char *bstr, uint str_len) {
char *hstr=malloc((str_len*2)+1);
bzero(hstr,(str_len*2)+1);
char *phstr=hstr;
for(int i=0; i<str_len;i++) {
*phstr++ =v2a((bstr[i]>>4)&0x0F);
*phstr++ =v2a((bstr[i])&0x0F);
}
*phstr++ ='\0';
return hstr;
}

char *unhexlify(char *hstr) {
char *bstr=malloc((strlen(hstr)/2)+1);
bzero(bstr,(strlen(hstr)/2)+1);
char *pbstr=bstr;
for(int i=0;i<strlen(hstr); i += 2)
*pbstr++ =(a2v(hstr[i])<<4)+a2v(hstr[i+1]);
*pbstr++ ='\0';
return bstr;
}
char *unhexlifyn(char *hstr, uint str_len) {
char *bstr=malloc((str_len/2)+1);
bzero(bstr,(str_len/2)+1);
char *pbstr=bstr;
for(int i=0;i<str_len; i += 2)
*pbstr++ =(a2v(hstr[i])<<4)+a2v(hstr[i+1]);
*pbstr++ ='\0';
return bstr;
}

关于c - C 中的 hexlify 和 unhexlify 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50627097/

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