IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Vitek:4.2.2019 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.2.2019 21:01
Avatar
petr.dar
Člen
Avatar
petr.dar:5.2.2019 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.2.2019 0:32
Avatar
petr.dar
Člen
Avatar
Odpovídá na petr.dar
petr.dar:5.2.2019 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.2.2019 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.