Front-end Front-end
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

Diskuze: Podivné chování binárního zápisu proměnné v C++

Aktivity (2)
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
Člen
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
Člen
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.