PHP týden Letní akce
Pouze tento týden sleva až 80 % na kurzy PHP. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Tomáš Vitek:4. února 21:01

Snažím se zapsat hlavičku mého binárního souboru, a všechno funguje dobře, až na jednu proměnnou. Tady je kód zápisu:

// Předchozí proměnné
uint32_t test;
test = 0;
file.write((char*)&test, sizeof(test));
// Následující proměnné

File je zde instance třídy std::ofstream. Všechny předchozí proměnné se zapíšou vpořádku, a stejně tak i všechny následující. Místo této se ale zapíše nějaké náhodné číslo.

Zkusil jsem: Zkoušel jsem kontrolovat čtení souboru, jestli není chyba tam. Při čtení jednoho nezměněného souboru se ale vždycky přečte to stejné číslo, ovšem jakmile vygeneruji pomocí kódu nahoře nový soubor, přečte se odsud nové, jiné náhodné číslo, takže chyba nejspíš bude už někde v zápisu.

 
Odpovědět 4. února 21:01
Avatar
petr.dar
Redaktor
Avatar
petr.dar:5. února 0:32

Takže, potřebuješ zapsat do souboru hodnotu proměnné test. Jen to nejde přes uint32_t ale použil jsem klasické int.
Vidim tam že špatně konvertuješ toto číslo do char, Já bych to napsal takto:

#include <iostream>
#include <fstream>
using namespace std;
int pocet_cislic(int number)
{
    int count = 0;
    while (number != 0) {
        number /= 10;
        count++;
    }
    return count;
}
int main()
{
    ofstream file("t.txt");
    int test;
    test = 523;
    char buffer[pocet_cislic(test)];
    itoa(test,buffer,10);
    file.write(buffer, pocet_cislic(test));
    return 0;
}
 
Nahoru Odpovědět 5. února 0:32
Avatar
petr.dar
Redaktor
Avatar
Odpovídá na petr.dar
petr.dar:5. února 0:37

Teď jsem zjistil, že nula se tam nevypíše ale jakákoliv jiná ano. Kdyžtak tam můžeš dát podmínku if ...

 
Nahoru Odpovědět 5. února 0:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.