ulozenie do .bin suboru   zodpovězená otázka

VB.NET

prosim pomozte mi do textboxu si otvorim a nacitam test.bin subor v HEX tvare takto:

subor = My.Computer.FileSystem.GetFileInfo("C:\test.bin")
        Dim br As New BinaryReader(File.OpenRead("C:\test.bin"))
        For i As Integer = 0 To subor.Length - 1
            br.BaseStream.Position = i
            precitane += br.ReadByte().ToString("X2")
        Next
        TextBox1.Text = precitane
        br.Close()

potom v textboxe urobim nejake zmeni v hexa a potrebujem to opat ulozit do c:\test2.bin suboru.

Neviem ako na to ist skusam to takto nejak ale sa mi nedari.

Dim bw As New BinaryWriter(File.OpenWrite("C:\test2.bin"))
            For i = 0 To 4096   ' 4kB 
                bw.Write(TextBox1.Text)
            Next
            bw.Close()
nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak sa mi to nakoniec podarilo vyriesit takto:

 Dim bw As New BinaryWriter(File.OpenWrite("C:\test2.bin"))
 For i = 0 To 4095
     bw.BaseStream.Position = i
     bw.Write(CInt("&H" & TextBox1.Text.Substring(i * 2, 2)))
 Next
 bw.Close()

ale na konci suboru ked ho hexeditujem tak mi este ulozi +3 bajty nulove a nechapem preco??

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pro načítání a ukládání hex stringu z/do streamu můžete použít tyto funkce:

public static string LoadToHexString(Stream inputStream)
{
    var sb = new StringBuilder();

    using (inputStream)
    {
        while (true)
        {
            int b = inputStream.ReadByte();
            if (b == -1)
            {
                break;
            }

            sb.AppendFormat("{0:X2}", b);
        }
    }

    return sb.ToString();
}

public static void SaveHexString(Stream outputStream, string hexString)
{
    using (outputStream)
    {
        if ((hexString.Length & 1) != 0)
        {
            throw new ArgumentException("Input must have even number of characters");
        }
        int length = hexString.Length / 2;

        for (int i = 0, j = 0; i < length; i++)
        {
            int high = ParseNybble(hexString[j++]);
            int low = ParseNybble(hexString[j++]);

            outputStream.WriteByte((byte)((high << 4) | low));
        }
    }
}

private static int ParseNybble(char c)
{
    if (c >= '0' && c <= '9')
    {
        return c - '0';
    }
    c = (char)(c & ~0x20);
    if (c >= 'A' && c <= 'F')
    {
        return c - ('A' - 10);
    }
    throw new ArgumentException("Invalid nybble: " + c);
}

a jejich volání bude např.:

TextBox1.Text = LoadToHexString(File.OpenRead("C:\test.bin"));

SaveHexString(File.OpenWrite("C:\test.bin"), TextBox1.Text);

Pro převod byte[] na hex string a opačně budou obdobné funkce takto:

public static string ToHexString(byte[] data)
{
    var sb = new StringBuilder(data.Length * 2);
    foreach (byte b in data)
    {
        sb.AppendFormat("{0:X2}", b);
    }
    return sb.ToString();
}

public static byte[] ParseHexString(string hexString)
{
    if ((hexString.Length & 1) != 0)
    {
        throw new ArgumentException("Input must have even number of characters");
    }
    int length = hexString.Length / 2;
    byte[] ret = new byte[length];
    for (int i = 0, j = 0; i < length; i++)
    {
        int high = ParseNybble(hexString[j++]);
        int low = ParseNybble(hexString[j++]);
        ret[i] = (byte)((high << 4) | low);
    }

    return ret;
}

private static int ParseNybble(char c)
{
    if (c >= '0' && c <= '9')
    {
        return c - '0';
    }
    c = (char)(c & ~0x20);
    if (c >= 'A' && c <= 'F')
    {
        return c - ('A' - 10);
    }
    throw new ArgumentException("Invalid nybble: " + c);
}
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback