Tengo una cadena de valores Hexadecimales…

String hexString = "8A65";

Que necesito para convertir esta cadena en sus equivalentes de Unicode. La parte difícil es que necesito apoyar a las diferentes páginas de código y el código de las páginas ‘8A65’ = un carácter, mientras que otras páginas de código podría convertir en dos caracteres.

Tengo ningún conocimiento previo de la página de código que voy a estar usando hasta que me tenga que realizar la conversión.

He probado todo tipo de cosas, tales como

byte[] original = Encoding.Unicode.GetBytes(hexString);
byte[] conv= Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(932), orig);
char[] chars = Encoding.GetEncoding(932).GetChars(conv);

Nota: la página de códigos 932 Japonés

SOLUCIÓN

string hexString = "8A65";
int length = hexString.length;
byte[] bytes = new byte[length / 2];

for (int i = 0; i < length; i += 2)
{
    bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}

char[] chars = Encoding.GetEncoding(932).GetChars(bytes);

Gracias pstrjds, usted es un protector de la vida!

  • ¿Cuál es el problema que usted ha visto con su enfoque? No realmente hacer una pregunta aquí.
  • Podría indicar cual es su necesidad como una pregunta?
  • Esta es una pregunta y respuesta de sitio. Usted pregunta, respondemos a ellos. La característica definitoria de una pregunta es que termina con un signo de interrogación (‘?’, Código ASCII 0x3F)
InformationsquelleAutor user1002479 | 2011-12-22

2 Comentarios

  1. 2

    Usted necesita para convertir la cadena hex en bytes (ver De MANERA posterior a la). Paso de la cadena hexadecimal en una de las codificaciones para convertirlo en bytes sólo le da el byte equivalente de los personajes. Estoy suponiendo que lo que quieres es que los dos bytes que el 4 de cadena de caracteres que representa, para decodificar el hex de bytes y, a continuación, puede utilizar la codificación en el decodificado bytes para obtener un string.

    Encoding.{YourEncoding}.GetChars(hexBytes);
    • Esto era exactamente lo que necesitaba. Gracias!
  2. 1
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    
    class Sample {
        static public void Main(){
            var data = "8A65";
            Regex regex = new Regex(@"(?<hex>[0-9A-F]{2})",RegexOptions.IgnoreCase | RegexOptions.Compiled);
            byte[] bytes = regex.Matches(data).OfType<Match>().Select(m => Convert.ToByte(m.Groups["hex"].Value,16)).ToArray();
            char[] chars = Encoding.GetEncoding(932).GetChars(bytes);
            Console.WriteLine(new String(chars));
       }
    } 

Dejar respuesta

Please enter your comment!
Please enter your name here