Пожалуйста, помогите ... Я пытаюсь изучить преобразование типов 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;
}