none
BinaryWriter nepíše binárně?

    Dotaz

  • Zdravím... zkouším si dělat jednoduchou konzolovou aplikaci, která po vstupu stringu ho přemění na char[] z kterého pak dostanu byte[] pro funkci BinaryWriter.Write...

    program mě vyhodí to co zapíši do souboru test.bin jenže když ho otevřu v notepadu naleznu tam normálně string místo šifrování nebo jak by se to dalo nazvat příklad: "

    Ԁ

    ".

    Nevím zda C# má něco jako Qt Framework pro C++ QDataStream. Přemýšlel jsem o StreamWriter tak jsem mrkl na youtube ale ono to vlastně dělá to samý jako BinaryWriter..opět to přečte v notepadu bez šifrování. Encoding mám ANSI.

    čtvrtek 14. června 2012 20:07

Všechny reakce

  • BinaryWriter dělá to, co má. Hoďte sem kód, jak ten BinaryWriter používáte a co přesně na něm voláte. Podle mě ho používáte špatně.

    Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz

    pátek 15. června 2012 13:38
    Přispěvatel
  • public void Write(string path, char[] Text, bool position = false, long offset = 0x0)
            {
                using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(path), Encoding.ASCII))
                {
                    if (position)
                        writer.BaseStream.Position = offset;
    
                    byte[] BinaryArray = Encoding.ASCII.GetBytes(Text);
    
                    writer.Write(BinaryArray);
                    Console.WriteLine("Zapisuji do {0}: {1}", path, Convert.ToString(BinaryArray));
                }
            }

    převod charu:

    char[] content2 = new char[content.Length];
    
                            for (int i = 0; i < content.Length; i++)
                                content2[i] = content[i];

    pátek 15. června 2012 17:02
  • 1. String nemusíte převádět na char[], funkce Encoding.ASCII.GetBytes bere i string.

    2. Ten kód a BinaryWriter funguje tak, jak má. String se v ASCII kódování převede na pole bajtů a BinaryWriter zapíše ty bajty, které dostane. V souboru je pochopitelně vidět původní text, protože i string jsou binární data. Písmeno A je v ASCII znak 65, ale ať ho zapíšete textově nebo binárně, v souboru bude pořád bajt s hodnotou 65, tudíž se to na monitoru vypíše jako velké A.

    Když do funkce předáte text "nazdar", v souboru se objeví "nazdar", protože binárně to tak odpovídá - ASCII kódování s těmi znaky de facto neudělá nic. Pokud tam dáte háčky a čárky, tak se místo nich objeví otazníky, protože ASCII je neumí.

    V původním dotazu píšete "naleznu tam normálně string místo šifrování". Žádné šifrování tam přece nemáte, tak se nedivte, že v souboru je to, co tam zapíšete.

    Čeho se přesně snažíte dosáhnout?


    Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz

    • Navržen jako odpověď Petr Barták čtvrtek 21. června 2012 21:23
    pátek 15. června 2012 17:22
    Přispěvatel
  • Nejspíš je to tak... asi to nějak dělá jinak ten QDataStream... je to možný. Díky za info to jsem chtěl vědět...jelikož některý typy souborů v kterým pracuju jsou právě v hexu nejsou ty stringy vůbec..ale jsou tam uložený v číselných proměnách .... nebo nějak tak ... Díky teda moc za vysvětlení.
    pátek 15. června 2012 18:33