Using your example.
Now putting the complete program, tested in the ideone.
#include <stdio.h>
#include <string.h> //strlen
int main()
{
// para loop "for"
int i;
// area de entrada
char hex[] = "6f69";
int sizeHex = strlen(hex);
// area de saida
char text[10];
// variaveis de conveniencia
char ch, high, low;
// trata todos os caracteres da area de entrada
for (i = 0; i < sizeHex; i += 2)
{
high = hex[i];
high -= 0x30;
if (high > 9) high -= 7;
high <<= 4;
low = hex[i+1];
low -= 0x30;
if (low > 9) low -= 7;
ch = high | low;
// transfere para area de saida
text[i/2] = ch;
}
text[i/2] = 0; // para delimitar string
printf("string hexadecimal: %s\n",text);
}
Considering the "0x":
#include <stdio.h>
#include <string.h> //strlen
int main()
{
// para loop "for"
int i;
// area de entrada
char hex[] = "0x6F0x69";
int sizeHex = strlen(hex);
// area de saida
char text[10];
// ponteiro para area de saida
char* pText = text;
// area de trabalho, vai ser usada com scanf --> vai 0x6F, depois 0x69, etc
char tmp[5];
// variavel de conveniencia
int ch;
tmp[4] = 0; // paa delimitar string de trabalho
// trata todos os caracteres da area de entrada
// anda de 4 em 4 porque cada caracter esta' codificado como "0xNN"
for (i = 0; i < sizeHex; i += 4)
{
memcpy(tmp, hex+i, 4);
sscanf(tmp, "%x", &ch);
// transfere para area de saida, e avanca ponteiro na area de saida
*pText++ = (char)ch;
}
*pText = 0; // para delimitar string
printf("string convertida: %s\n",text);
}
That's not what was asked, but I find it interesting too.
#include <stdio.h>
int main()
{
// para loop "for"
int i;
// area de entrada
char hex[3];
// area de saida
char text[10];
// variaveis de conveniencia
char ch, high, low;
// constante caracter usas aspas simples (apostrofo), e '\xNN'
hex[0] = '\x69';
hex[1] = '\x20';
hex[2] = '\x31';
// trata todos os caracteres da area de entrada
for (i = 0; i < 3; i++)
{
// pega um caracter da area de entrada
ch = hex[i];
// converte meio byte 'a esquerda para caracter hexa visivel
high = ch >> 4; // desloca 4 bits 'a direita
high &= 0x0F; // zera os 4 bits da esquerda
if (high > 9) high += 7; // se for maior que 9, ajusta o valor para resultar numa letra
high = high + 0x30; // transforma em caracter visivel
// repete para meio byte 'a direita (nao precisa deslocar 4 bits)
low = ch & 0x0F;
if (low > 9) low += 7;
low = low + 0x30;
// transfere para area de saida
text[2*i] = high;
text[2*i+1] = low;
}
text[2*i] = 0; // para delimitar string
printf("string convertida: %s\n",text);
}