abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 19:11 | Nová verze

    Bun (Wikipedie), tj. běhové prostředí (runtime) a toolkit pro JavaScript a TypeScript, alternativa k Node.js a Deno, byl vydán ve verzi 1.4. Představení novinek také na YouTube. Bun byl přepsán z programovacího jazyka Zig do Rustu. Pomocí Claude Fable 5.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Nová verze

    Vývojáři KDE na Mastodonu oznámili vydání balíku aplikací KDE Gear 26.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | IT novinky

    Společnost PINE64 kvůli nedostatku a vysokým cenám DRAM a eMMC dočasně pozastavuje výrobu linuxových zařízení. Výroba zařízení jako PineTime, PineVoice a Pinecil pokračuje.

    Ladislav Hagara | Komentářů: 0
    včera 02:55 | IT novinky

    Společnost Stripe se dohodla na akvizici společnosti OpenRouter. Za 7,5 miliardy dolarů.

    Ladislav Hagara | Komentářů: 0
    včera 01:33 | Nová verze

    Byla vydána nová verze 1.27 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    19.8. 16:00 | Pozvánky

    V pátek 28. srpna se v Praze uskuteční již osmý Mobile Linux Hackday. Jako obvykle se potkáme v pražské pobočce SUSE v Karlíně na Křižíkově, takže kromě mobilního Linuxu je to tentokrát i příležitost přijít se podívat na nově zrekonstruované kanceláře. Začínáme v 10:00, ale dorazit můžete samozřejmě kdykoliv v průběhu dne. Setkáním vás provede David Heidelberg, vývojář GPU ovladačů v Mesa 3D a jeden z hlavních lidí české komunity kolem … více »

    lkocman | Komentářů: 0
    19.8. 14:11 | IT novinky

    Představen byl Raspberry Pi Compute Module 5 Programming Jig. Jedná se o zařízení umožňující připravit Compute Module 5 do plně funkčního stavu bez nutnosti použití dalších vstupně / výstupních desek. Podporuje automatizaci pomocí nástroje rpi-sb-provisioner. Podrobnosti v dokumentaci.

    Ladislav Hagara | Komentářů: 1
    19.8. 05:55 | IT novinky

    Hackeři ve Francii ukradli data více než půl milionu daňových poplatníků. Je to jeden z největších hackerských útoků v dějinách země. O útoku z konce června informovala až teď daňová správa. Teprve od pondělí dotčeným občanům zasílá e-maily s instrukcemi, jak postupovat dál. Hackeři se sice nedostanou k penězům dotyčných, hrozí ale věrohodné podvody. Hackeři získali třeba celá jména, údaje o rodinných příslušnících nebo také údaje o

    … více »
    Ladislav Hagara | Komentářů: 19
    19.8. 04:44 | IT novinky

    Společnost Framework představila nový Framework Laptop 12 s Intel Core Series 3, Thunderbolt 4, Wi-Fi 7, volitelnou čtečkou otisků prstů a podsvícenou klávesnicí s open-source firmwarem ZMK. Objednat lze s předinstalovanou Fedorou 44 KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    18.8. 16:44 | Nová verze

    Byl vydán Mozilla Firefox 154.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 154 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (19%)
     (30%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2448 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: C++ endian

    19.4.2011 22:45 martin
    C++ endian
    Přečteno: 595×
    Nazdar,

    dnes som sa zacal zaoberat s big endian a little endian. Opisal som program z knihy Profesionalne Linux programovani aplikaci a po skompilovani som dospel k tomu ze mam big endian. To by bolo aj fajn ked ako vystup mi hodilo toto:

    0xdeadbeef

    [0] = 0xffffffef [1] = 0xffffffbe [2] = 0xffffffad [3] = 0xffffffde

    Prikladam zdrojovy kod.

    Podla big endian by mal byt vystup skor [0] = 0xffffffde [1] = 0xffffffad [2] = 0xffffffbe [3] = 0xffffffef

    Viete mi niekto vysvetlit kde moze byt chyba? Alebo som ja zle pochopil endian ?

    Dakujem :)

    Řešení dotazu:


    Odpovědi

    19.4.2011 23:02 ghost
    Rozbalit Rozbalit vše Re: C++ endian
    "dospel k tomu ze mam big endian" Jak? Mas nejaky "exoticky" hw? Protoze treba procesory kompatibilni s Intel x86 jsou (aspon co je mi znamo) prave LE.
    19.4.2011 23:08 martin
    Rozbalit Rozbalit vše Re: C++ endian
    Konkretne mam CPU E8400 co je 64-bit. A tym padol by mal byt big endian. Lenze mne program vypisal vystup, ktory zodpoveda little endian. Preco ? :D
    19.4.2011 23:11 ghost
    Rozbalit Rozbalit vše Re: C++ endian
    rekl bych, ze problem je v samotne detekci. Ty mas: int little_endian(){ int endian = 1; return (0==((char*)&endian)); } A podle mne by melo byt: int little_endian(){ int endian = 1; return (0==(*(char*)&endian)); }
    19.4.2011 23:19 ghost
    Rozbalit Rozbalit vše Re: C++ endian
    1.Omlouvam se za formatovani.
    2.Snad me vetsi znalci C/C++ neukamenuji. Porovnani ((char*)&endian)) == 0 je spatne, protoze ty porovnavas int (hodnotu) s ukazatelem na char. Aby to bylo spravne, tak jej musis dereferencovat: (*(char*)&endian)) == 0
    20.4.2011 11:55 Sten
    Rozbalit Rozbalit vše Re: C++ endian
    Core 2 je x86-64, což je architektura založená na x86 a to je little endian. Bitovost procesoru nemá s endianitou nic společného.
    19.4.2011 23:16 martin
    Rozbalit Rozbalit vše Re: C++ endian
    Ahah, mas pravdu mam tam chybu ma to tak byt ako si napisal. No po skompilovani stale to iste, nic sa nezmenilo.
    19.4.2011 23:22 ghost
    Rozbalit Rozbalit vše Re: C++ endian
    musis ted porovnavat s 1, ptz jestli je LE, tak 1 bude prave na zacatku
    20.4.2011 00:45 Sten
    Rozbalit Rozbalit vše Re: C++ endian
    Nejjednodušší způsob, jak otestovat endianitu na Linuxu (pokud nechcete používat to makro):
    #include <arpa/inet.h>
    
    bool bigEndian = htons(0x1234) == 0x1234;
    Funkce htons převádí endianitu z místní na síťovou a síťová endianita je velká. Takže pokud je po převodu číslo nezměněné, počítá stroj ve velkém endiánu.

    Co se týče vašeho zdrojáku, má to být takto:
    return 1 ==(*reinterpret_cast<char*>(&endian));
    Když tam máte 0, testujete big endian, ne little endian (na little endian bude nejméně významný bajt první, což je ten, který obsahuje tu jedničku).

    Po přetypování to musíte dereferencovat (operátorem *), jinak porovnáváte ukazatel, ne hodnotu (a ten ukazatel nikdy nebude nullptr).

    A je to C++, tak raději používejte přetypování z C++.
    20.4.2011 17:15 ghost
    Rozbalit Rozbalit vše Re: C++ endian
    A je to C++, tak raději používejte přetypování z C++.
    V C/C++ nedelam, muzete mi osvetlit v cem se to ve vysledku lisi? Resp. proc je to vyhodnejsi? Jen co do cistoty kodu, ci to ma i jiny vyznam? Diky
    clayman avatar 20.4.2011 17:49 clayman | skóre: 13 | Praha 6
    Rozbalit Rozbalit vše Re: C++ endian
    Za Stena mluvit nemůžu, ale předpokládám, že hlavní výhoda tkví v tom, že používáte knihovní funkci, tzn. praxí ověřenou věc namísto vlastních krkolomných konstrukcí, které mohou být náchylné k chybám. :-)
    clayman avatar 20.4.2011 20:06 clayman | skóre: 13 | Praha 6
    Rozbalit Rozbalit vše Re: C++ endian
    Eh, jsem si měl pořádně přečíst tvůj citát... :-(
    20.4.2011 17:58 Sten
    Rozbalit Rozbalit vše Re: C++ endian
    Význam je hlavně v tom, že explicitně říkáte, co tím přetypováním chcete udělat, jestli chcete odstranit const (const_cast), přetypovat natvrdo (static_cast), dynamicky (dynamic_cast) anebo úplně změnit význam nějakého pointeru (reinterpret_cast) (případně si pak můžete nadefinovat i vlastní přetypovávání, např. v Boostu je hodně dobré lexical_cast, které překládá obsah proměnných), takže pokud tam uděláte chybu (třeba reinterpret_cast zároveň odstraní const), tak to překladač odmítne přeložit.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.