AAAAH! nieuw op een mac dusquote:Op dinsdag 7 oktober 2014 21:09 schreef Yuri_Boyka het volgende:
Sublime blijft ook als actief aangegeven staan in de dock, terwijl ik hem afgesloten heb (rood kruisje).
Hahaha, ja, vandaag binnengekregen!quote:Op dinsdag 7 oktober 2014 21:22 schreef Gehenna het volgende:
[..]
AAAAH! nieuw op een mac dus
ja je moet ook cmd+Q gebruiken(Of in het menu: Stop Sublime), met het kruisje sluit je het window, en dus je documenten (ja nogal counter-intuitief als je windows bent gewend.. maar goed)
Went heel snel, die key-combi's ga je van houdenquote:Op dinsdag 7 oktober 2014 21:24 schreef Yuri_Boyka het volgende:
[..]
Hahaha, ja, vandaag binnengekregen!
MAAR HET WERKT MAN!Wel een beetje irritant dan dat het met het kruisje niet werkt.
| 1 2 3 4 5 6 7 8 9 10 | #include <iostream> #include <fstream> using namespace std; int main() { ofstream file; file.open("test.bin", ios::out | ios::binary); file.write("10101010", 8); file.close(); return 1; } |
Ben je aan het trollen?quote:Op donderdag 6 november 2014 18:50 schreef FastFox91 het volgende:
Ik probeer een 8bit binary file weg te schrijven, maar de grootte van het bestand is 8 bytes, waarschijnlijk omdat die de bits als karakters ziet.
[ code verwijderd ]
Volgens mij zou de grootte 1byte moeten zijn. Kan iemand mij dit uitleggen?
quote:
ios::binary doet niet wat jij denkt dat het doet.quote:
"A binary stream is an ordered sequence of characters that can transparently record internal data."quote:Op donderdag 6 november 2014 19:11 schreef t4rt4rus het volgende:
[..]
ios::binary doet niet wat jij denkt dat het doet.
http://en.cppreference.com/w/cpp/io/c#Binary_and_text_modes
Dus als je "10101010" write, schrijf je"1", "0", "1", "0" , "1", "0", "1", "0" weg, dat zijn 8 bytes.
Verder:
- Moet je 0 returnen als er geen error is, dus geen 1. Je kan in C++ return 0; ook weg laten in main.
- Hebben we RAII.
File openen kan je in de constructor doen. En je hoeft hem niet te closen want dat gebeurd al als je object out of scope gaat.
- En using namespace std; is eigenlijk niet zo handig om te gebruiken.
Dan schrijf je 170 weg... Het getal niet "170"quote:Op donderdag 6 november 2014 19:36 schreef FastFox91 het volgende:
[..]
"A binary stream is an ordered sequence of characters that can transparently record internal data."
Dat is jammer, ik dacht even makkelijk bits weg te kunnen schrijven.
Nu kan ik "10101010" ook schrijven in decimaal, dus "170" en dat kost slechts 3 karakters ipv 8 (of heximal 2). Weet jij een manier om het toch terug te brengen naar 1 byte?
Bedankt voor de overige tips. Ik sta er eigenlijk niet bij stil of het correct/goed/handig is wat ik doe.
Wat ik nu ga proberen is om binary om te zetten naar ascii en dan op te slaan, maar eigenlijk wil ik gewoon bits kunnen wegschrijven.
Bij het inlezen van test.bin kan ik rekening houden dat het decimaal is opgeslagen. 170 kan ik weer omzetten naar binair.quote:Op donderdag 6 november 2014 20:17 schreef t4rt4rus het volgende:
[..]
Dan schrijf je 170 weg... Het getal niet "170"
Het wordt niet decimaal opgeslagen het wordt binair opgeslagen.quote:Op donderdag 6 november 2014 20:28 schreef FastFox91 het volgende:
[..]
Bij het inlezen van test.bin kan ik rekening houden dat het decimaal is opgeslagen. 170 kan ik weer omzetten naar binair.
quote:Op donderdag 6 november 2014 20:28 schreef t4rt4rus het volgende:
[..]
Het wordt niet decimaal opgeslagen het wordt binair opgeslagen.
| 1 2 3 4 5 | std::ofstream file("test.txt"); file.write("170", 3); // 3 karakters en 3 bytes std::ofstream file2("test.bin", std::ios::binary); file2.write("10101010", 8); // 8 bits, maar wordt opgeslagen als 8 karakters en 8 bytes. |
Je moet je even inlezen in basis C++.quote:Op donderdag 6 november 2014 20:36 schreef FastFox91 het volgende:
[..]
[ code verwijderd ]
test.txt is dan toch niet binair opgeslagen?
Wat je zegt, weet ik.quote:Op donderdag 6 november 2014 23:05 schreef t4rt4rus het volgende:
[..]
Je moet je even inlezen in basis C++.
Een string is een byte array.
"10101010" is dan ook gewoon een array met 8 karakters(en null teriminated).
Dat is 8 byte en niet 8 bit.
Het is uiteindelijk gelukt om een 8bit binary string om te zetten naar een char en die weg te schrijven naar een bestand zodat die 1 byte blijft. Bedankt voor je reacties t4rt4rus.
"170" is een string met 3 karakters '1', '7' en '0'.
Als je 1 byte wilt wegschrijven is het niet handig als je er 8 bytes instopt.quote:Op vrijdag 7 november 2014 08:40 schreef FastFox91 het volgende:
[..]
Wat je zegt, weet ik.
Ik vulde alleen "10101010" in omdat de write function als eerste parameter een string verwacht.
Welke 8 bits wil je opslaan?quote:Op vrijdag 7 november 2014 08:40 schreef FastFox91 het volgende:
[..]
Wat je zegt, weet ik.
Ik vulde alleen "10101010" in omdat de write function als eerste parameter een string verwacht. Mijn vraag is of het mogelijk is om 8 bits op te slaan in een bestand ter grootte van 1 byte?
Net niet, nu wel. Het is gelukt.quote:Op vrijdag 7 november 2014 09:00 schreef thabit het volgende:
Mijn God, je kan toch wel een binaire string naar een byte omzetten en vice versa?
Ik had aangenomen dat in de functie write de karakters als binary werden geïnterpreteerd.quote:Op vrijdag 7 november 2014 09:14 schreef Tijn het volgende:
[..]
Als je 1 byte wilt wegschrijven is het niet handig als je er 8 bytes instopt.
1, 0, 1, 0, 1, 0, 1 en 0.quote:
| 1 2 3 4 5 6 7 8 9 | #include <stdio.h> #include <stdlib.h> int main(void) { char * ptr; long parsed = strtol("11110111", & ptr, 2); printf("%lX\n", parsed); return EXIT_SUCCESS; } |
quote:Op vrijdag 7 november 2014 09:40 schreef Gehenna het volgende:
Wellicht kan het nog mooier of compacter, maar hiermee kun je een binary string omzetten naar een getal
[ code verwijderd ]
| 1 2 3 | bool x[] = {0, 1, 1, 1, 0, 0, 1, 0}; int y = x[0] << 7 | x[1] << 6 | x[2] << 5 | x[3] << 4 | x[4] << 3 | x[5] << 2 | x[6] << 1 | x[7]; char z = (char) y; |
| 1 | char z = 64+32+16+2 |
Char is ook een integer, dus je hebt geen int nodig.quote:Op vrijdag 7 november 2014 10:21 schreef FastFox91 het volgende:
Dan kan ik net zo goed direct char z = 114 doen.Ik heb die int y = .. wel nodig want de binary string verandert steeds.
Dat eerste bedoel ik (char z = 0b01110010; kan overigens ook), dat laatste bleek niet uit je code. In dat geval kun je line 2 beter in een loop gooien voor leesbaarheid. Je loopt ook in de knoei als x[0]=true omdat je signed ints gebruikt (vanwege one's complement).quote:Op vrijdag 7 november 2014 10:21 schreef FastFox91 het volgende:
Dan kan ik net zo goed direct char z = 114 doen.Ik heb die int y = .. wel nodig want de binary string verandert steeds.
| 1 2 | bitset<10> somebits(string("01011")); string somestring = somebits.to_string(); |
| 1 2 3 4 5 6 7 8 9 | std::vector<foo*> test; test.push_back(new foo); for(int i = 0; i < test.size(); i++) delete test[i]; test.clear(); test.push_back(new foo); // hier crashed het programma |
Dit is te summier. Geef eens een compileerbaar programma (dus inclusief main) dat deze fout genereert. Daar kunnen we wat meer mee.quote:Op vrijdag 14 november 2014 00:59 schreef netolk het volgende:
Hey Fok!ers.
Ik heb wat problemen met vectoren die pointers hebben...
[ code verwijderd ]
Het idee is dat foo een virual class is en er dus derived classes aan de vector worden toegevoegd.
Het probleem is alleen dat wanneer ik de vector dus geleegd heb (met clear() ) dan crashed het programma als ik er weer wat aan toe probeer te voegen.
Kan iemand mij vertellen waarom dit gebeurt en hoe ik dit kan voorkomen? Internet maakt mij namelijk niet veel wijzer
|
|
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |