Kezdőlap › Fórumok › Programozás › C programozás 2
- This topic has 75 hozzászólás, 10 résztvevő, and was last updated 19 years, 11 months telt el by
kisbetu.
-
SzerzőBejegyzés
-
2005-06-12-09:54 #2017247
„Azért kell mert a BMP fileknek van header része amibõl kiderül hogy alkalmas e steganographias célra vagy sem. „
Szerintem bármelyikbe el lehet rejteni információkat… mint laikus mondom csak. (Az persze kérdés, hogy milyen hatékonysággal.)„Meg van adva hogy melyik mezõ hány bájt és ha más típusú változóba (pl 2 bájtos értéket egy 4 bájtos változóba ) olvasok be akkor néhány érték nem megfelelõ lesz.”
Miért? Ezt nem értem. „125” 2 byte-ben, meg 4 byte-ban is 125… vagy nem? Az más kérdés, hogy a másik 2 byte-ot le***-od.2005-06-12-10:34 #2017248Miért? Ezt nem értem. „125” 2 byte-ben, meg 4 byte-ban is 125… vagy nem? Az más kérdés, hogy a másik 2 byte-ot le***-od.
Ez azért nem ilyen simán megy. pl egy if(bmih->biBitCount != 24) -nél ha a bmih->biBitCount 2 bájtos akkor az értéket helyesen 24-nek olvassa ki voszont ha 4 bájt akkor már „szemetet” is beolvas és az így kapott szám hiába kezdõdik 24-el, az öszehasonlító mûveletnél nem lessz azonos a két érték.
2005-06-12-10:53 #2017249„Ez azért nem ilyen simán megy. pl egy if(bmih->biBitCount != 24) -nél ha a bmih->biBitCount 2 bájtos akkor az értéket helyesen 24-nek olvassa ki voszont ha 4 bájt akkor már „szemetet” is beolvas és az így kapott szám hiába kezdõdik 24-el, az öszehasonlító mûveletnél nem lessz azonos a két érték.”
Most mi van? A szemét az = 0-val… Ha véletlenül mégis volt valami odaírva elõtte, ki kell nullázni, vagy maszkolni, ahogy mutattam. (sõt eleve if (valtozo | 24); egyébként ez akkor hasznos, ha csak bitek fontosak a bytban;
pl.:
#define color_mask 1
#define palette_mask 2
#define gray_mask 4
#define bw_mask 8if (mask | color_mask) {
printf(„ez szines”);
}
if (!(mask | bw_mask)) {
printf(„ez pedig nem fekete-fehér”);
})
(Az megint más kérdés, hogy a file-ból, meg szemetet eleve nem másolsz bele a változódba ugye?)2005-06-12-12:20 #2017250Most mi van? A szemét az = 0-val… Ha véletlenül mégis volt valami odaírva elõtte, ki kell nullázni, vagy maszkolni, ahogy mutattam. (sõt eleve if (valtozo | 24); egyébként ez akkor hasznos, ha csak bitek fontosak a bytban;
pl.:
#define color_mask 1
#define palette_mask 2
#define gray_mask 4
#define bw_mask 8if (mask | color_mask) {
printf(„ez szines”);
}
if (!(mask | bw_mask)) {
printf(„ez pedig nem fekete-fehér”);
})
(Az megint más kérdés, hogy a file-ból, meg szemetet eleve nem másolsz bele a változódba ugye?)Most ezt nem értemm megin légyszi szájbarágósan mert még nehezen megy. Kérdéseim: Mért pont logikai vagy? Mit jelent a maszkolás, hogyan kell? Mit jelent a kinullázás, hogyan kell? Egész fenti kóddal mit tudok elérni?
2005-06-12-13:11 #2017251Adott egy 4 byteos változó a memóriában az így néz ki:
0x00000000
ebbe a file-ból bemásolsz 2 byte-ot, mely mondjuk 255-ös szám, akkor ez így fog kinézni:
0x000000FF, ha nem 4, hanem 2 byte-os, akkor így néz ki 0x00FF – ugyanaz. (a szemét az nulla)
Ha ezt ki akarod nullázni azt kizáró vagy mûvelettel végzed el (praktikusan) önmagával:
var XOR var (0x000000FF XOR 0x000000FF) – ami azt jelenti, hogy ahol egyforma a bit nullává válik.
szerencsére a c nyelv var=0; kifejezést pont mindig pont így végzi el (de éppen ezért számodra ez lényegtelen)„Mért pont logikai vagy?”
Mert a logikai vagy esetén akkor válik 1-é a végeredmény bit, ha mindkét forrásbit 1
0 0 -> 0
1 0 -> 0
0 1 -> 0
1 1 -> 1Tehát:
color_mask = 00000001
palette_mask = 00000010
gray_mask = 00000100mondjuk (gray_mask OR bármi) kifejezés értéke csak akkor és csakis akkor válik nem 0-vá, ha a bármiban a 3. bit 1 (vagyis a bármi azonos gray_mask-kal, vagy gray_mask + szeméttel)
másik példa ((gray_mask AND color_mask) OR bármi) kifejezés értéke akkor és csakis akkor válik nem 0-vá, ha bármi tartalmazza a gray_mask-ot ill. a color_mask-ot is.Nos azért hoztam fel ezt a példát, mert ha bitképekkel fogsz dolgozni ezt az eljárást ismerned kell.
„Egész fenti kóddal mit tudok elérni?”
Pont a gyakorlati jelentését írtam ide (legalábbis bitképeknél):
if (mask | color_mask) {
printf(„ez szines”);
}
if (!(mask | bw_mask)) {
printf(„ez pedig nem fekete-fehér”);
}2005-06-12-13:27 #2017252Mert a logikai vagy esetén akkor válik 1-é a végeredmény bit, ha mindkét forrásbit 0
Ezt javítsd ki!
2005-06-12-15:45 #2017253Mert a logikai vagy esetén akkor válik 1-é a végeredmény bit, ha mindkét forrásbit 0
0 0 -> 0
1 0 -> 0
0 1 -> 0
1 1 -> 0Vizsla! Itt nem rontottál el valamit?
Elõször is mindenhol 0 van, ez gondolom elgépelés, másodszor pedig logikai ‘vagy’ esetén a kifejezés értéke akkor lesz ‘Igaz’, ha valamelyik tag értéke ‘Igaz’.Ráadásul a következõ mintapéldában a ‘|’ nem is logikai vagy, hanem ‘bitmûvelet vagy’. A logikai vagy az a ‘||’.
2005-06-12-15:59 #2017254Maradjunk annyiban, hogy lehet nullára és lehet egyre maszkolni (egyiket vagyolva, másikat éselve). Az adott feladattól függ, hogy éppen melyiket használjuk.
Mindenesetre Vizsla majd kijavítja, ha visszajön.
2005-06-12-16:04 #2017255Meg van adva hogy melyik mezõ hány bájt és ha más típusú változóba (pl 2 bájtos értéket egy 4 bájtos változóba ) olvasok be akkor néhány érték nem megfelelõ lesz.
Ezt kb úgy szokták megoldani, hogy ugye tudod, hány bájt a teljes fejléc, ezért ezt az egészet beolvasod egy memória területre:
Code:#define HEADER_MERET 18
…
unsigned char header[HEADER_MERET];
…
//load the file header
file.seekg (0, ios::beg);
file.read((char *) header, sizeof(header));
….
m_width = header[12] + header[13] * 256;
m_height = header[14] + header[15] * 256;
color_depth = header[16];Ez ugyan c++ kód, de az elv a lényeg.
2005-06-12-16:07 #2017256Maradjunk annyiban, hogy lehet nullára és lehet egyre maszkolni (egyiket vagyolva, másikat éselve). Az adott feladattól függ, hogy éppen melyiket használjuk.
Minden tiszteletem a tiétek, kisbetu, de a ‘bites vagy (|) ‘ használatával a kód mindig igazat ad, így használhatatlan az én olvasatomban. Vagy valamit tényleg félre nézek. :rolleyes:
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz