¿Cuál es la forma idiomática de C# de convertir una cadena de caracteres en una cadena de caracteres hexadecimales? [cerrado]

Tengo una cadena de caracteres, pero me gustaría tener una cadena de caracteres hexadecimales donde los caracteres hexadecimales se conviertan convirtiendo los caracteres originales en números enteros y luego esos números enteros en caracteres hexadecimales. ¿Cómo puedo hacer eso?

Así es como lo hice en VB:

for i = 1 to len(str)
    hex_str = hex_str + lcase(cstr(hex(asc(mid(str, i, 1))))) 
next 

Ahora, ¿cuál es la forma más idiomática de hacer esto en C#?

preguntado el 03 de mayo de 12 a las 20:05

por favor usa algo como convertidor.telerik.com -

@JonathanAllen, no, no es una pregunta inútil. Al preguntar algo en SO, el OP normalmente debería proporcionar algunos intentos para resolver el problema. Si no lo hace, no debería estar preguntando aquí. Probablemente debería buscar contratar a un desarrollador de C# para que haga el trabajo por él. SO no es una empresa de subcontratación. Así que repito mi pregunta al OP: ¿Qué has probado? mattgemmell.com/2008/12/08/que-has-intentado -

@JonathanAllen: No estoy de acuerdo. Stack Overflow no es un medio para agrupar pequeñas tareas de desarrollo. En general, se recomienda que el OP ponga algo esfuerzo en la tarea y señalar dónde no está funcionando. En este caso, habría sido tan simple como tratar de convertirlo a C# (es razonable suponer que el OP sabe algo C#, de lo contrario, ¿por qué está convirtiendo algo?) y presentarnos cualquier error de lógica/compilador que no entienda o con el que necesite ayuda. Simplemente pedirnos que hagamos la conversión por él es un poco presuntuoso. -

@JonathanAllen: Si esa es su pregunta, entonces debería formularse como tal. "¿Qué hacen estas funciones y cuál es el equivalente de C#?" o "¿Cuál es la forma idiomática de C# de hacer [insertar tarea aquí], que hace este código de VB?" Tal como está, "Convertir esto a C# para mí" es una mala pregunta. Debe especificar de qué se trata el código que le presenta un obstáculo. De la pregunta tal como está, solo puedo suponer que el obstáculo es que no conoce la sintaxis de C# y no quiere saberla. -

3 Respuestas

En C #, el enfoque más fácil que se me ocurre es:

var hexStr = str.ToCharArray()
                .Aggregate("", (current, c)
                               => current + Convert.ToInt32(c).ToString("X"));

Esta primera línea convierte la cadena en una matriz de caracteres de tipo char[], la segunda y tercera línea convierten cada carácter en un número entero Int32 y luego en un carácter hexadecimal de tipo String. Ese carácter hexadecimal se agrega al hexStr De tipo String a través de un función agregada.

Aquí están las funciones utilizadas en la expresión anterior:

Para la agregación, he usado un expresión lambda (parameters => return value). Es una función que toma current y c y return current + Convert.ToInt32(c).ToString("X");

Si algo no está claro, no dude en preguntar en los comentarios a continuación.

contestado el 03 de mayo de 12 a las 21:05

No soy un desarrollador de VB.NET pero con un convertidor, tengo esto:

for (i = 1; (i <= str.Length); i++) {
     hex_str = (hex_str + hex(asc(str.Substring((i - 1), 1))).ToString().ToLower());
}

contestado el 03 de mayo de 12 a las 20:05

No sé qué convertidor usaste, pero ¿cuál es hex y asc? Esto no compilará. - darin dimitrov

@TomWijsman Son funciones integradas en VB. - Jonathan Allen

Es porque HEX y ASC son funciones integradas sin análogos en C#; el convertidor probablemente haya incorporado esas funciones tal como son. Efectivamente, toma una cadena, obtiene el código ascii entero y luego devuelve el código hexadecimal para ese entero por lo que parece. - guión

@JonathanAllen: Pero no en C#. - Tamara Wijsman

Prueba esto:

 for (var i = 1; i <= str.Length; i++)
    {
        hex_str = hex_str + Convert.ToString(Convert.ToString(Convert.ToInt32(str[i - 1]), 16).ToUpper()).ToLower();
    }

contestado el 03 de mayo de 12 a las 20:05

Creo que hay un poco demasiadas conversiones allí. :D - Tamara Wijsman

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.