tengo una cadena hexagonal y quiero que se convierta en cadena ascii en C. ¿Cómo puedo lograr esto?Hex a cadena de conversión ascii
Respuesta
Es necesario tomar 2 caracteres (hex) al mismo tiempo ... luego calcular el valor int y después de eso hacer la conversión carbón como ...
char d = (char)intValue;
hacer esto para cada 2chars en la cadena hexadecimal
esto funciona si los caracteres de cuerdas son solamente 0-9A-F:
#include <stdio.h>
#include <string.h>
int hex_to_int(char c){
int first = c/16 - 3;
int second = c % 16;
int result = first*10 + second;
if(result > 9) result--;
return result;
}
int hex_to_ascii(char c, char d){
int high = hex_to_int(c) * 16;
int low = hex_to_int(d);
return high+low;
}
int main(){
const char* st = "48656C6C6F3B";
int length = strlen(st);
int i;
char buf = 0;
for(i = 0; i < length; i++){
if(i % 2 != 0){
printf("%c", hex_to_ascii(buf, st[i]));
}else{
buf = st[i];
}
}
}
pocos personajes como alphabe ts i-o no se pudo convertir en los caracteres ASCII respectivos. como en la cadena '6631653064316f30723161' corresponde a fedora. pero da fedra
Simplemente modifique la función hex_to_int() un poco y funcionará para todos los caracteres. función modificada es
int hex_to_int(char c)
{
if (c >= 97)
c = c - 32;
int first = c/16 - 3;
int second = c % 16;
int result = first * 10 + second;
if (result > 9) result--;
return result;
}
Ahora trata de que funcione para todos los caracteres.
strtol()
es tu amigo aquí. El tercer parámetro es la base numérica que está convirtiendo.
Ejemplo:
#include <stdio.h> /* printf */
#include <stdlib.h> /* strtol */
int main(int argc, char **argv)
{
long int num = 0;
long int num2 =0;
char * str. = "f00d";
char * str2 = "0xf00d";
num = strtol(str, 0, 16); //converts hexadecimal string to long.
num2 = strtol(str2, 0, 0); //conversion depends on the string passed in, 0x... Is hex, 0... Is octal and everything else is decimal.
printf("%ld\n", num);
printf("%ld\n", num);
}
así que no 'itoa' ... – Yvain
@Yvain no. para empezar, la conversión con 'itoa()' es el camino equivocado. 'atoi()' solo acepta entrada decimal. 'atof' acepta hexadecimal (necesita comenzar por' "0x" 'como en el segundo ejemplo anterior, y solo funciona con C99 o posterior (si eso importa)) – Baldrickk
- 1. Conversión de cadena binaria a ASCII correspondiente
- 2. bash ascii al hex
- 3. Cómo convertir de Hex a ASCII en JavaScript?
- 4. Ascii/Hex convertir en bash
- 5. Parse HEX ASCII en números?
- 6. Conversión de UTF8 a ASCII
- 7. Convertir una cadena a HEX en SQL
- 8. Convertir cadena hexadecimal (hex) a una cadena binaria
- 9. Conversión de instrucciones ARM muy simples a binario/hex
- 10. ¿Convertir de cadena ASCII codificada en hexadecimal a ASCII simple?
- 11. C# Conversión delphi TColor al color (Hex)
- 12. Conversión de Java UTF-8 a ASCII con suplementos
- 13. Ruby - Conversión de entero a cadena
- 14. MS SQL Server - Convierte la cadena HEX a entero
- 15. Ir cadena a Ascii array de bytes
- 16. Conversión de cadena hexadecimal de nuevo a char
- 17. Convertir hex a flotante
- 18. Conversión de archivos ASCII de origen a archivos JPEG
- 19. NSString (hex) a bytes
- 20. conversión de cadena estrecha a cadena ancha
- 21. Conversión de cadena a entero
- 22. conversión de cadena a numérico
- 23. Convirtiendo cadena larga de binario a hex C#
- 24. Decode Hex de cadenas en Python 3
- 25. Bash: Convierte caracteres no ASCII a ASCII
- 26. Node.js: contraseña crypto.pbkdf2 a Hex
- 27. Convertir RBG a HEX
- 28. Convertir una cadena de hexadecimal en ASCII en Java
- 29. conversión de XML a cadena usando C#
- 30. Conversión de una cadena a DateTime
no es una cadena hexadecimal (por ejemplo: ' "F00BA4"') un caso especial de cadena ASCII? ¿O está usando EBCDIC? :) – pmg