Как преобразовать шестнадцатеричные данные из текстового файла в строковый файл - PullRequest
0 голосов
/ 25 марта 2019

У меня есть список данных в текстовом файле, который записан в шестнадцатеричном виде, как это:

AE 66 55 78 FF 6A 48 40 CA BC 1B 2C 18 94 28 28 
CF EA 02 00 02 51 23 05 0E F2 DD 5A E5 38 48 48 
CA BC 1B 2C 18 94 28 40 EE B6 65 87 E3 6A 48 48 
..

И я хочу преобразовать значения в char в другом текстовом файле

Я пробовал это в c #:

 private static void OpenFile()
            {
ASCIIEncoding ascii = new ASCIIEncoding();

                string str = string.Empty;
                using (System.IO.BinaryReader br = new System.IO.BinaryReader
                    (new System.IO.FileStream(
                        "hexa2.txt",
                        System.IO.FileMode.Open,
                        System.IO.FileAccess.Read,
                        System.IO.FileShare.None), Encoding.UTF8))
 using (System.IO.StreamWriter sw = new System.IO.StreamWriter("sms23.txt"))
                {
                   str = @"the path";
                    Byte[] bytes = ascii.GetBytes(str);
                    foreach (var value in bytes)
                        sw.WriteLine("{0:X2}", value);
                    sw.WriteLine();
                    String decoded = ascii.GetString(bytes);
                    sw.WriteLine("Decoded string: '{0}'", decoded);
                }
           }

Я ожидаю, что каждый байт будет преобразован в символ.например, "EE" это "î"

Ответы [ 2 ]

1 голос
/ 25 марта 2019

У вас есть текстовый файл, а не двоичный файл, поэтому вы должны прочитать шестнадцатеричные строки, затем преобразовать их в соответствующее число и затем получить соответствующий символ для этого числа.

// string input = @"EE B6 45 78 FF 6A 48 40 CA BC 1B 2C 18 94 28 28 
// CF EA 02 00 00 00 00 00 0E F2 DD 5A E4 38 48 48 
// CA BC 1B 2C 18 94 28 40 EE B6 45 78 FF 6A 48 48 ";
string input = File.ReadAllText("yourFile.txt");
string output = new string(
    input.Replace("\n"," ").Replace("\r","")
        .Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries)
        .Select(x=>(char)Convert.ToInt32(x,16))
        .ToArray()
);
File.WriteAllText("newFile.txt",output);
//Output: î¶ExÿjH@ʼ←,↑?((Ïê☻     ♫òÝZä8HHʼ←,↑?(@î¶ExÿjHH

Вы не указали кодировку, поэтому я просто приведу гекс к символу напрямую. Чтобы указать кодировку, вы должны использовать приведенный ниже код

byte[] dataArray = 
    input.Replace("\n"," ").Replace("\r","")
        .Split(new char[]{' '},StringSplitOptions.RemoveEmptyEntries)
        .Select(x=>(byte)Convert.ToInt32(x,16))
        .ToArray();
string output = Encoding.UTF8.GetString(dataArray);

Где вы можете заменить Encoding.UTF8 на нужный.

0 голосов
/ 25 марта 2019
string hex = File.ReadAllText("file.txt").Replace(" ","").Replace(Environment.NewLine,"");
var result = Enumerable.Range(0, hex.Length)
             .Where(x => x % 2 == 0)
             .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
             .ToArray();


File.WriteAllBytes( "file.bin", result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...