Zapis zmiennej string do pliku hex

0

Cześć,

Chciałem zrobić odczyt pliku hex, które zostaje przypisany mojej zmiennej string "hex" a następnie zostaje zapisany jako nowy plik również hex.

Problem w tym, że po odczytaniu mojego pliku hex, przypisania jego wartości do stringa "hex" wszystko jest ok. Potem gdy chcę moją zmienna string"hex" zapisać jako nowy plik pojawia się problem bo oba pliki różnią się od siebie.

Proszę zobaczyć na screeny z obu odczytanych plików i zobaczyć na kod. Nie wiem gdzie leży błąd przy przepisywaniu.

 
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.ShowDialog();

            BinaryReader br = new BinaryReader(File.OpenRead(ofd.FileName));
            string hex = null;

            for (int i = 0; i <= 12811; i++)
            {
                br.BaseStream.Position = i;
                hex += br.ReadByte().ToString("X2");
            }

            richTextBox2.Text = hex;

            SaveFileDialog save = new SaveFileDialog();

           

            if (save.ShowDialog() == DialogResult.OK)
            {
                BinaryWriter binarywrit = new BinaryWriter(File.Create(save.FileName));
                byte[] rebin = Convert.FromBase64String(hex);
              
                binarywrit.Write(rebin);
                
            }

Odczytują mój pierwotny plik hex i wczytując go np. do kontrolki richTextBox to widać, że string jest prawidłowo odczytany.

np. plik ma"03 40 A4 01 82 00 BC 02" a w kontrolce jest "0340A4018200BC02"

0

Skąd tam FromBase64String? Masz przecież hexy. Użyj

Convert.ToByte(s, 16);

EDIT:
Tu masz gotowca: http://stackoverflow.com/questions/321370/how-can-i-convert-a-hex-string-to-a-byte-array

public static byte[] StringToByteArray(string hex) {
    return Enumerable.Range(0, hex.Length)
                     .Where(x => x % 2 == 0)
                     .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                     .ToArray();
}
0

A ja trochę nie rozumiem. Chodzi o to, że masz stringa, którego chcesz zapisać binarnie do pliku, a później odczytujesz sobie ten plik zapisując wynik w innym stringu, którego chcesz z kolei zapisać o innego pliku? I te pliki się różnią?

Może tak spróbuj ale nie wiem czy dobrze Cię rozumiem Twój problem:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Program {
    class HexFile {
        public void Write(string path, string data) {
            using (var file = new FileStream(path, FileMode.Create)) {
                using (var stream = new BinaryWriter(file)) {
                    stream.Write(data);
                    stream.Close();
                }
                file.Close();
            }
        }

        public string Read(string path) {
            using (var file = new FileStream(path, FileMode.Open)) {
                var result = "";
                using (var stream = new BinaryReader(file)) {
                    result = stream.ReadString();
                    stream.Close();
                }
                file.Close();
                return result;
            }
        }
    }

    class Program {
        static void Main(string[] args) {
            var test = "Grzegorz Łukasz";

            var hex = new HexFile();
            hex.Write("test.bin", test);

            var another = hex.Read("test.bin");
            hex.Write("another.bin", another);
        }
    }
}

Tutaj pliki test.bin oraz another.bin mają identyczną zawartość. Popatrz w hex edytorze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1