bajtsorrend

Kezdőlap Fórumok Programozás bajtsorrend

5 bejegyzés megtekintése - 1-5 / 5
  • Szerző
    Bejegyzés
  • #1910883
    admin
    Adminisztrátor

      egyszerû: az int 2 byte-os, a *(char*)&x pedig az x címére mutató mutató által mutatott egy byte 🙂
      ezt nem tudom normálisan elmagyarázni…
      szóval egyetlen byte-ra mutat, ez a két byte-os int fele, és itt vagy 0 van, vagy 1

      #1910884
      gabaman
      Felhasználó

        egyszerû: az int 2 byte-os

        Az int a gcc alatt soha nem volt 2 bájtos, hanem 4 bájtos. Ha nem hiszed:
        printf(„int mérete: %dn”, sizeof(int));

        *(char *)&x
        ez 3 részbõl áll össze:
        &x: az x változó címe
        (char*)&x: az intre mutató pointer átállítása char típusra mutatóra
        *(…): a zárójelben levõ mutató átkonvertálása hivatkozásra
        így talán kicsit jobban érthetõ:
        *((char *)(&x))
        Kizárólag a lényegét tekintve a (char)x -re hasonlít, de nem értéket konvertál, hanem az x változó legelsõ bájtját adja vissza.

        Az (int)1 érték így tárolódik a memóriában (a címek növekvõ sorrendben vannak, 0. 1. 2. 3. bájt):
        Little-endian: 01 00 00 00
        Big-endian: 00 00 00 01

        #1910885
        gabaman
        Felhasználó

          Ha esetleg nem lenne világos mindkettõ formátum, akkor írok két példát:

          Big-endian: az arab számok írásának sorrendje balról jobbra történõ írás esetén (pl. magyar, angol). Ilyenkor a legnagyobb helyiérték kerül a legelsõ helyre.
          Little-endian: az arab számok írása arab nyelvi környezetben (jobbról balra). A kisebb helyiérték lesz elõször leírva.

          Legyen p (int*), és r (char*) típusú pointer. Ilyenkor az r = (char*)p kiértékelése így történik:
          Big-endian: r = p + 3;
          Little-endian: r = p;
          Az elsõt egyes RISC processzorok alkalmazzák, míg pl. az x86 architektúra az utóbbit alkalmazza.

          #1910886
          blackjack
          Felhasználó

            Sziasztok!

            Amit elmondtatok az ok, de hogy lehet mondjuk ezzel a módszerrel az int különbözõ bytejaihoz char pointert rendelni, hogy pl. az egyes byteok értékeit karakterként iratnám ki.

            #1870383
            csaba
            Felhasználó

              Valaki lecci magyarazza el. hogy az alabi progi higy mukszik? Elvileg a bajtsorrendet donti el

              main()
              {
              int x = 1;

              if (*(char *)&x == 1) {
              printf(„little-endiann”);
              } else {
              printf(„big-endiann”);
              }
              }

              if -el kezdodo sor nem vilago.
              Koszi

            5 bejegyzés megtekintése - 1-5 / 5
            • Be kell jelentkezni a hozzászóláshoz.