{"id":2281,"date":"2021-09-11T21:33:28","date_gmt":"2021-09-11T21:33:28","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2281"},"modified":"2021-09-11T21:33:28","modified_gmt":"2021-09-11T21:33:28","slug":"haftalik-c-41-endiannes","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/","title":{"rendered":"Haftal\u0131k C++ 41 &#8211; &#8220;Endiannes&#8221;"},"content":{"rendered":"<p>Tekrar merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m. Bug\u00fcn sizlerle birlikte, belki de bir\u00e7o\u011funuzun hi\u00e7 fark\u0131nda olmad\u0131\u011f\u0131 ya da kullan\u0131rken pek farketmedi\u011fi bir konuya de\u011finece\u011fim, &#8220;Endianness&#8221;.<\/p>\n<p>E\u011fer masa\u00fcst\u00fc ya da web ya da mobil bir yaz\u0131l\u0131m geli\u015ftiricisiyseniz, bu kavramla hi\u00e7 tan\u0131\u015fmam\u0131\u015f olabilirsiniz. Hatta, g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131m geli\u015ftiricisi iseniz ve e\u011fer tek bir i\u015flemci ailesi ile \u00e7al\u0131\u015fma f\u0131rst\u0131 yakalam\u0131\u015f \u00e7ok \u015fansl\u0131 bir az\u0131nl\u0131k i\u00e7erisindeyseniz, bu kavram\u0131 yine duymam\u0131\u015f olabilirsiniz. Fakat, farkl\u0131 i\u015flemci mimarileri ve haberle\u015fme protokolleri ile \u00e7al\u0131\u015fm\u0131\u015fsan\u0131z, bu yaz\u0131m ilginizi \u00e7ekebilir.<\/p>\n<p>Bu yaz\u0131mda, bu kavram\u0131 masaya yat\u0131r\u0131p, ne anlama geldi\u011fine, bize yans\u0131malar\u0131n\u0131n ne oldu\u011funa ve bunu nas\u0131l kotaraca\u011f\u0131m\u0131za bak\u0131yor olaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikle bunun ne oldu\u011funa bir bakal\u0131m. Bunun i\u00e7in de birinci kayna\u011f\u0131m\u0131z elbette <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.wikiwand.com\/en\/Endianness\">wikipedia<\/a><\/strong><\/span>. T\u00fcrk\u00e7e k\u0131sm\u0131 \u00e7ok detayl\u0131 de\u011fil ve yanl\u0131\u015f y\u00f6nlendirebilir ama ingilizce k\u0131sm\u0131 olduk\u00e7a detayl\u0131, okuman\u0131z iyi olur, elbette ben burada \u00f6nemli noktalar\u0131 sizler ile payla\u015faca\u011f\u0131m. \u00d6ncelikle tan\u0131m\u0131na bir bakal\u0131m. Elbette, hepsinin \u00fczerine C++ da serpi\u015ftirece\u011fiz \ud83d\ude09<\/p>\n<p>&#8220;Endianness&#8221; asl\u0131nda de\u011ferlerin\/say\u0131sal verilerin, byte olarak bellekte tutulma s\u0131ras\u0131na verilen isim (benzer \u015fekilde haberle\u015fme kanallar\u0131 \u00fczerinden g\u00f6nderilme s\u0131ras\u0131). G\u00fcn\u00fcm\u00fcz d\u00fcnyas\u0131nda kulland\u0131\u011f\u0131m\u0131z bilgisayar mimarileri, yazma ve okuma i\u015flemleri i\u00e7in kulland\u0131klar\u0131 en k\u00fc\u00e7\u00fck birim byte&#8217;d\u0131r. Bir \u00e7ok i\u015flemci, bellekteki say\u0131sal verilere byte olarak eri\u015fmeye imkan verirler, fakat birden fazla byte s\u00f6z konusu oldu\u011funda, ilgili yakla\u015f\u0131m \u00f6nem arz eder. \u0130ki dominant &#8220;endianness&#8221; yakla\u015f\u0131m\u0131 bulunmaktad\u0131r. Bunlar &#8220;big-endian (BE)&#8221; ya da &#8220;little-endian (LE)&#8221; &#8216;d\u0131r.<\/p>\n<p>&#8220;Big endian&#8221; sistemlerde, ilgili dijital verinin en y\u00fcksek byte&#8217;\u0131 en k\u00fc\u00e7\u00fck adreste, en d\u00fc\u015f\u00fck byte&#8217;\u0131 ise en b\u00fcy\u00fck adreste tutulur. &#8220;Little endian&#8221; sistemlerde ise bunun tam tersi ge\u00e7erlidir. \u00d6rne\u011fin, elimizde 16 bit&#8217;lik bir short de\u011fi\u015fkeni oldu\u011funu d\u00fc\u015f\u00fcnelim. Bu de\u011fi\u015fken temelde iki byte&#8217;dan olu\u015fmakta. 0-7 bitleri d\u00fc\u015f\u00fck byte&#8217;\u0131, 8-15 bitleri ise b\u00fcy\u00fck byte de\u011ferini tutar. Buraya kadar asl\u0131nda &#8220;endianness&#8221; \u0131n bir etkisi yok. Ne zaman ki, bu byte&#8217;lar bellekte nas\u0131l tutulur diye sordu\u011fumuzda ya da \u00f6rne\u011fin seri kanal \u00fczerinde ilk hangi byte g\u00f6nderilir dedi\u011fimizde, &#8220;endianness&#8221; \u00f6nem kazan\u0131r.<\/p>\n<p>Kullan\u0131d\u0131\u011f\u0131m\u0131z \u0130ntel ve AMD i\u015flemciler, &#8220;little-endian&#8221; yakla\u015f\u0131m\u0131n\u0131 kullanmaktad\u0131r. Baz\u0131 Power PC, IBM z mimarileri ise &#8220;big-endian&#8221; yakla\u015f\u0131m\u0131n\u0131 kullanmaktad\u0131r. Ayr\u0131ca, a\u011f protokollerinde de &#8220;big-endian&#8221; yakla\u015f\u0131m\u0131 dominantt\u0131r.<\/p>\n<p>\u015eimdi elimizde\u00a0<strong>43981\u00a0<\/strong>say\u0131s\u0131 oldu\u011funu d\u00fc\u015f\u00fcnelim. Bu say\u0131n\u0131n byte dizilimi 16&#8217;l\u0131k d\u00fczende \u015fu \u015fekildedir : <strong>0xABCD<\/strong>. Bu say\u0131n\u0131n, MSB&#8217;si (&#8220;most significant byte&#8221;) AB ve rakam\u0131 da (16 l\u0131k d\u00fczende), A&#8217;d\u0131r. Bu say\u0131n\u0131n, iki yakla\u015f\u0131ma g\u00f6re nas\u0131l ifade edildi\u011fine hemen bir fig\u00fcr ile bakal\u0131m:<\/p>\n<p id=\"gkyulnR\"><img loading=\"lazy\" decoding=\"async\" width=\"743\" height=\"590\" class=\"size-full wp-image-2283 aligncenter\" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928.png 743w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928-300x238.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928-500x397.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928-150x119.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928-400x318.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2021\/09\/img_613d0eecf0928-200x159.png 200w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/p>\n<p>San\u0131r\u0131m, bu fig\u00fcr, sizler i\u00e7in bu iki yakla\u015f\u0131m\u0131 \u00f6zetlemek ad\u0131na faydal\u0131 olmu\u015ftur.<\/p>\n<p>\u015eimdi, az\u0131c\u0131k kodlama yapal\u0131m. \u00d6rne\u011fin, elimizdeki bir say\u0131n\u0131n bellekteki byte dizilimini g\u00f6rebilir miyiz? Elbette, hemen bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;stdio.h&gt;\r\n  \r\n\/\/ Bellekten verilen adresten (kucukten-buyuge) baslayarak, ilgili sayiyi 16 duzende gosteren fonksiyon\r\nvoid ShowMemRep(char *start, int n) {\r\n    \r\n    for (int i = 0; i &lt; n; i++)\r\n         printf(\" %.2X\", static_cast&lt;unsigned char&gt;(start[i]));\r\n    printf(\"\\n\");\r\n}\r\n  \r\nint main() {\r\n   unsigned short i = 0xABCD;\r\n   ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;i), sizeof(i));\r\n   return 0;\r\n}<\/pre>\n<p>Bu kodu, &#8220;little endian&#8221; bir makinede \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z &#8221; CD AB&#8221; g\u00f6r\u00fcrs\u00fcn\u00fcz. Tam tersi, &#8220;big endian&#8221; bir makinede \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z &#8221; AB CD&#8221; g\u00f6r\u00fcrs\u00fcn\u00fcz.<\/p>\n<p>Peki yaz\u0131l\u0131msal olarak, \u015fu an kodumuzun \u00e7al\u0131\u015ft\u0131\u011f\u0131 makinenin &#8220;endianness&#8221; yakla\u015f\u0131m\u0131n\u0131 \u00f6\u011frenebilir miyiz? Evet, onu da \u00f6\u011frenebiliriz. Nas\u0131l m\u0131, hemen bakal\u0131m.<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\nusing namespace std;\r\nint main() { \r\n    unsigned int i = 1; \r\n    char *c = reinterpret_cast&lt;char *&gt;(&amp;i); \r\n    \r\n    if (*c) \r\n        std::cout&lt;&lt;\"Little endian\"; \r\n    else\r\n        std::cout&lt;&lt;\"Big endian\"; \r\n    return 0; \r\n}<\/pre>\n<p>Evet,\u00a0 gelelim yaz\u0131m\u0131z\u0131n 10 puanl\u0131k sorusuna. &#8220;Endiannes&#8221; olay\u0131 benim yoluma ne zaman \u00e7\u0131kar?<\/p>\n<ul>\n<li>Farkl\u0131 i\u015flemci mimarileri ile haberle\u015fen bir yaz\u0131l\u0131m\u0131n\u0131z var ise,<\/li>\n<li>Ya da farkl\u0131 i\u015flemci mimarileri taraf\u0131ndan, bellek verilerinin \u00fcretildi\u011fi dosyalar ile u\u011fra\u015f\u0131yorsan\u0131z.<\/li>\n<\/ul>\n<p>Elbette, bu tarz haberle\u015fen sistemlere ili\u015fkin bir protokol tasarl\u0131yorsan\u0131z, kaynak sistemin &#8220;endianness&#8221;&#8216;\u0131na ili\u015fkin bir bitlik bilgiyi mesajlar\u0131n\u0131z i\u00e7ine g\u00f6mebilirsiniz ve kim neye sahip duyurabilirsiniz \ud83d\ude09<\/p>\n<p>Velev ki, bakt\u0131n\u0131z elinizdeki veri, sizin makinenizin &#8220;endiannes&#8221; \u0131 ile uyumlu de\u011fil ne yapacaks\u0131n\u0131z. E\u011fer QT kullan\u0131yorsan\u0131z, i\u015finiz kolay. Verileri d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qdatastream.html\">QDataStream<\/a><\/strong><\/span> tek kaynak olarak kullanabilece\u011finiz, donan\u0131ml\u0131 ve olduk\u00e7a yak\u0131\u015f\u0131kl\u0131 bir s\u0131n\u0131f. Bu s\u0131n\u0131f saysesinde, farkl\u0131 boyutlarda verileri belirleyece\u011finiz &#8220;endianness&#8221; yakla\u015f\u0131m\u0131na g\u00f6re, byte dizisine \u00e7evirebilir ya da byte dizisi olarak ald\u0131\u011f\u0131n\u0131z verilerden ilgili say\u0131lar\u0131 \u00fcretebilirsiniz. Ayr\u0131ca say\u0131lar\u0131 d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qtendian.html\">&lt;QtEndian&gt;<\/a><\/strong><\/span> ba\u015fl\u0131k dosyas\u0131 i\u00e7erisinde de bir tak\u0131m yard\u0131mc\u0131 fonksiyonlar mevcut. Bu s\u0131n\u0131flardan esinlenerek kendi s\u0131n\u0131flar\u0131n\u0131z\u0131 da yazabilirsiniz, misal ben zaman\u0131nda bir aviyonik projesi i\u00e7in DataStream s\u0131n\u0131f\u0131 yazd\u0131yd\u0131m.<\/p>\n<p>Yaz\u0131m\u0131 bitirmeden, kod boh\u00e7am\u0131n i\u00e7erisinde, teee 2017&#8217;de, yazd\u0131\u011f\u0131m bir s\u0131n\u0131f\u0131 da sizler ile payla\u015f\u0131yorum, tepe tepe kullanabilirsiniz. O zamanlar yaz\u0131lan bu s\u0131n\u0131f, bu sat\u0131ra kadar yazd\u0131\u011f\u0131m bir \u00e7ok noktay\u0131 i\u00e7erisinde bar\u0131nd\u0131r\u0131yor. \u00d6zellikle <em>GetSystemByteOrder()\u00a0<\/em>tek ba\u015f\u0131na kullan\u0131labilir, ayr\u0131ca &#8220;variadic template&#8221; &#8216;lar\u0131n kullan\u0131m\u0131na da g\u00fczel bir \u00f6rnek oldu ne dersiniz \ud83d\ude09<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;iostream&gt;\r\n#include &lt;cstdint&gt;\r\n#include &lt;string.h&gt;\r\nusing namespace std;\r\n\r\nenum class uByteOrder : uint32_t {\r\n    eBYTE_ORDER_BIG_ENDIAN,\r\n    eBYTE_ORDER_LITTLE_ENDIAN,\r\n};\r\n\r\nclass uEndianness {\r\npublic:\r\n    uEndianness() = delete;\r\n\r\n    \/\/! Calisma zamaninda endianness'a bakalim\r\n    static uByteOrder GetSystemByteOrder() {\r\n        int16_t word = 0x0001;\r\n        int8_t* byteToCheck = (int8_t*)&amp;word;\r\n\r\n        return (byteToCheck[0] ? uByteOrder::eBYTE_ORDER_LITTLE_ENDIAN : uByteOrder::eBYTE_ORDER_BIG_ENDIAN);\r\n    }\r\n\r\n    \/\/! Makrolar ile kod icerisinde belirtmek istersek\r\n    constexpr static bool IsBigEndian() {\r\n#ifdef UENGINE_BIG_ENDIAN\r\n        return true;\r\n#else\r\n        return false;\r\n#endif\r\n    }\r\n\r\n    \/\/! Verilen sayiyi big endian'a cevirir ve doner. Zaten big endian olan sistemlerde bir donusum yapma\r\n    \/\/! Calisma zamaninda kontrol de eklenebilir\r\n    template&lt;class T&gt; static T BigEndian(T value) {\r\n#ifdef UENGINE_BIG_ENDIAN\r\n        return number;\r\n#else\r\n        return Swap(value);\r\n#endif\r\n    }\r\n\r\n    \/\/! Verilen sayiyi tipine gore gerekli degisim fonksiyonuna paslar\r\n    template&lt;class T&gt; static T Swap(T value)   {\r\n        return Swap&lt;sizeof(T)&gt;(value);\r\n    }\r\n\r\n    \/\/! Verilen sayiyinin kendisini big endian'a cevirir, zaten big endian olan sistemlerde bir donusum yapmaz\r\n    \/\/! Calisma zamaninda kontrol de eklenebilir\r\n#if !defined(UENGINE_BIG_ENDIAN)\r\n    template&lt;class ...T&gt; static void BigEndianInPlace(T&amp;... values)  {\r\n        BigEndianInPlaceInternal(values...);\r\n    }\r\n#else\r\n    template&lt;class ...T&gt; static void BigEndianInPlace(T&amp;...) {}\r\n#endif\r\n\r\n    \/\/! Verilen sayiyi little endian'a cevirir ve doner. Zaten little endian olan sistemlerde bir donusum yapma\r\n    \/\/! Calisma zamaninda kontrol de eklenebilir\r\n    template&lt;class T&gt; static T LittleEndian(T number) {\r\n#ifdef UENGINE_BIG_ENDIAN\r\n        return Swap(number);\r\n#else\r\n        return number;\r\n#endif\r\n    }\r\n\r\n    \/\/! Verilen sayiyinin kendisini little endian'a cevirir, zaten little endian olan sistemlerde bir donusum yapmaz\r\n    \/\/! Calisma zamaninda kontrol de eklenebilir\r\n#if defined(UENGINE_BIG_ENDIAN)\r\n    template&lt;class ...T&gt; static void LittleEndianInPlace(T&amp;... values)   {\r\n        LittleEndianInPlaceInternal(values...);\r\n    }\r\n#else\r\n    template&lt;class ...T&gt; static void LittleEndianInPlace(T&amp;...) {}\r\n#endif\r\n\r\nprivate:\r\n    template&lt;std::size_t size&gt; struct TypeFor {};\r\n    template&lt;std::size_t size&gt; static typename TypeFor&lt;size&gt;::Type Swap(typename TypeFor&lt;size&gt;::Type value);\r\n\r\n#ifndef UENGINE_BIG_ENDIAN\r\n    template&lt;class T, class ...U&gt; static void BigEndianInPlaceInternal(T&amp; first, U&amp;... next)  {\r\n        first = BigEndian(first);\r\n        BigEndianInPlaceInternal(next...);\r\n    }\r\n    static void BigEndianInPlaceInternal() {}\r\n#else\r\n    template&lt;class T, class ...U&gt; static void LittleEndianInPlaceInternal(T&amp; first, U&amp;... next)    {\r\n        first = LittleEndian(first);\r\n        LittleEndianInPlaceInternal(next...);\r\n    }\r\n    static void LittleEndianInPlaceInternal() {}\r\n#endif\r\n};\r\n\r\n\/\/! 1, 2, 4, ve 8 byte'lik sayilar icin kullanilacak donusum fonksiyonlari\r\ntemplate&lt;&gt; struct uEndianness::TypeFor&lt;1&gt; { typedef std::uint8_t  Type; };\r\ntemplate&lt;&gt; struct uEndianness::TypeFor&lt;2&gt; { typedef std::uint16_t Type; };\r\ntemplate&lt;&gt; struct uEndianness::TypeFor&lt;4&gt; { typedef std::uint32_t Type; };\r\ntemplate&lt;&gt; struct uEndianness::TypeFor&lt;8&gt; { typedef std::uint64_t Type; };\r\n\r\ntemplate&lt;&gt; inline std::uint8_t uEndianness::Swap&lt;1&gt;(std::uint8_t value){\r\n    return value;\r\n}\r\n\r\ntemplate&lt;&gt; inline std::uint16_t uEndianness::Swap&lt;2&gt;(std::uint16_t value) {\r\n    return (value &gt;&gt; 8) |\r\n        (value &lt;&lt; 8);\r\n}\r\ntemplate&lt;&gt; inline std::uint32_t uEndianness::Swap&lt;4&gt;(std::uint32_t value) {\r\n    return (value &gt;&gt; 24) |\r\n        ((value &lt;&lt; 8) &amp; 0x00ff0000u) |\r\n        ((value &gt;&gt; 8) &amp; 0x0000ff00u) |\r\n        (value &lt;&lt; 24);\r\n}\r\ntemplate&lt;&gt; inline std::uint64_t uEndianness::Swap&lt;8&gt;(std::uint64_t value) {\r\n    return (value &gt;&gt; 56) |\r\n        ((value &lt;&lt; 40) &amp; 0x00ff000000000000ull) |\r\n        ((value &lt;&lt; 24) &amp; 0x0000ff0000000000ull) |\r\n        ((value &lt;&lt; 8) &amp; 0x000000ff00000000ull) |\r\n        ((value &gt;&gt; 8) &amp; 0x00000000ff000000ull) |\r\n        ((value &gt;&gt; 24) &amp; 0x0000000000ff0000ull) |\r\n        ((value &gt;&gt; 40) &amp; 0x000000000000ff00ull) |\r\n        (value &lt;&lt; 56);\r\n}\r\n\r\nvoid ShowMemRep(char *start, int n) { \r\n    for (int i = 0; i &lt; n; i++) \r\n        printf(\" %.2X\", static_cast&lt;unsigned char&gt;(start[i])); \r\n    \r\n    printf(\"\\n\"); \r\n}\r\n\r\nint main() { \r\n    \/\/ Sistemimiz nedir?\r\n    if (uByteOrder::eBYTE_ORDER_LITTLE_ENDIAN == uEndianness::GetSystemByteOrder()) \r\n        std::cout&lt;&lt;\"Little endian\\n\"; \r\n    else\r\n        std::cout&lt;&lt;\"Big endian\\n\"; \r\n    \r\n    \/\/ API'ler ile biraz oynasalim\r\n    std::cout&lt;&lt;\"Tekli d\u00f6n\u00fcs\u00fcmler\\n\"; \r\n    uint16_t value = 0xABCD;\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;value), sizeof(value));\r\n    value = uEndianness::Swap(value);\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;value), sizeof(value));\r\n    \r\n    uint64_t bigValue = 0x1234567890ABCDEF;\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue), sizeof(bigValue));\r\n    bigValue = uEndianness::Swap(bigValue);\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue), sizeof(bigValue));\r\n\r\n    std::cout&lt;&lt;\"Toplu d\u00f6n\u00fcs\u00fcmler\\n\"; \r\n    \/\/ Sistemimiz little-endian oldugu icin, variadic template'lar ile biraz raks edelim :)\r\n    \/\/ Tabi ki BigEndianInPlace i kullanarak\r\n    uint64_t bigValue1 = 0x1234567890ABCDEF;\r\n    uint64_t bigValue2 = 0x34567890ABCDEF12;\r\n    uint64_t bigValue3 = 0x567890ABCDEF1234;\r\n    std::cout&lt;&lt;\"Little endian gosterimler\\n\"; \r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue1), sizeof(bigValue1));\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue2), sizeof(bigValue2));\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue3), sizeof(bigValue3));\r\n    \r\n    uEndianness::BigEndianInPlace(bigValue1, bigValue2, bigValue3);\r\n    \r\n    std::cout&lt;&lt;\"Big endian gosterimler\\n\"; \r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue1), sizeof(bigValue1));\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue2), sizeof(bigValue2));\r\n    ShowMemRep(reinterpret_cast&lt;char *&gt;(&amp;bigValue3), sizeof(bigValue3));\r\n\r\n    return 0; \r\n}<\/pre>\n<p>UENGINE kullan\u0131m\u0131 dikkatinizi \u00e7ekmi\u015ftir, nereden geliyor diye merak ediyorsan\u0131z, zaman\u0131dna giri\u015fti\u011fim, \u00fc\u00e7 d\u00f6rt iterasyon oyun motoru \u00e7al\u0131\u015fmalar\u0131ndan geliyor. U&#8217;nun nereden geldi\u011fi ise \u015fimdilik ben de kals\u0131n \ud83d\ude1b<\/p>\n<p>Bu arada, bu ve benzeri kod par\u00e7alar\u0131n\u0131 da <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\">https:\/\/github.com\/yazilimperver<\/a><\/strong><\/span> alt\u0131na bir proje a\u00e7\u0131p toplamay\u0131 planl\u0131yorum, ne dersiniz? G\u00f6r\u00fc\u015flerinizi bekliyorum.<\/p>\n<p>Bir sonraki yaz\u0131ma kadar kendinize \u00e7ok iyi bak\u0131n sevgili yaz\u0131l\u0131mperver dostlar\u0131m.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar:<\/strong><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/www.wikiwand.com\/en\/Endianness\"><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/Endianness<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=NcaiHcBvDR4\"><span style=\"color: #008000;\"><strong>https:\/\/www.youtube.com\/watch?v=NcaiHcBvDR4<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.techtarget.com\/searchnetworking\/definition\/big-endian-and-little-endian\"><span style=\"color: #008000;\"><strong>https:\/\/www.techtarget.com\/searchnetworking\/definition\/big-endian-and-little-endian<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.bgasecurity.com\/2015\/04\/exploit-gelistiriciler-icin\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.bgasecurity.com\/2015\/04\/exploit-gelistiriciler-icin\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/doc.qt.io\/qt-5\/qdatastream.html\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/qdatastream.html<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/doc.qt.io\/qt-5\/qtendian.html\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/qtendian.html<\/strong><\/span><\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Tekrar merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m. Bug\u00fcn sizlerle birlikte, belki de bir\u00e7o\u011funuzun hi\u00e7 fark\u0131nda olmad\u0131\u011f\u0131 ya da kullan\u0131rken pek farketmedi\u011fi bir konuya de\u011finece\u011fim, &#8220;Endianness&#8221;. E\u011fer masa\u00fcst\u00fc ya da web ya da mobil bir yaz\u0131l\u0131m geli\u015ftiricisiyseniz, bu kavramla hi\u00e7 tan\u0131\u015fmam\u0131\u015f olabilirsiniz. Hatta, g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131m geli\u015ftiricisi iseniz ve e\u011fer tek bir i\u015flemci ailesi ile \u00e7al\u0131\u015fma f\u0131rst\u0131 yakalam\u0131\u015f \u00e7ok&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":174,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41,188],"tags":[899,46,898,900,858],"class_list":["post-2281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","category-yazilim-muhendisligi","tag-big-endian","tag-c-11","tag-endianness","tag-little-endian","tag-variadic-templates"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 41 - &quot;Endiannes&quot; - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Haftal\u0131k C++ 41 - &quot;Endiannes&quot; - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Tekrar merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m. Bug\u00fcn sizlerle birlikte, belki de bir\u00e7o\u011funuzun hi\u00e7 fark\u0131nda olmad\u0131\u011f\u0131 ya da kullan\u0131rken pek farketmedi\u011fi bir konuya de\u011finece\u011fim, &#8220;Endianness&#8221;. E\u011fer masa\u00fcst\u00fc ya da web ya da mobil bir yaz\u0131l\u0131m geli\u015ftiricisiyseniz, bu kavramla hi\u00e7 tan\u0131\u015fmam\u0131\u015f olabilirsiniz. Hatta, g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131m geli\u015ftiricisi iseniz ve e\u011fer tek bir i\u015flemci ailesi ile \u00e7al\u0131\u015fma f\u0131rst\u0131 yakalam\u0131\u015f \u00e7ok... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-11T21:33:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png\" \/>\n\t<meta property=\"og:image:width\" content=\"32\" \/>\n\t<meta property=\"og:image:height\" content=\"32\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 41 &#8211; &#8220;Endiannes&#8221;\",\"datePublished\":\"2021-09-11T21:33:28+00:00\",\"dateModified\":\"2021-09-11T21:33:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\"},\"wordCount\":1046,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"big-endian\",\"C++ 11\",\"Endianness\",\"little-endian\",\"variadic templates\"],\"articleSection\":[\"C++\",\"Modern C++\",\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\",\"name\":\"Haftal\u0131k C++ 41 - \\\"Endiannes\\\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2021-09-11T21:33:28+00:00\",\"dateModified\":\"2021-09-11T21:33:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 41 &#8211; &#8220;Endiannes&#8221;\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Haftal\u0131k C++ 41 - \"Endiannes\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/","og_locale":"tr_TR","og_type":"article","og_title":"Haftal\u0131k C++ 41 - \"Endiannes\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Tekrar merhaba sevgili yaz\u0131l\u0131mperver dostlar\u0131m. Bug\u00fcn sizlerle birlikte, belki de bir\u00e7o\u011funuzun hi\u00e7 fark\u0131nda olmad\u0131\u011f\u0131 ya da kullan\u0131rken pek farketmedi\u011fi bir konuya de\u011finece\u011fim, &#8220;Endianness&#8221;. E\u011fer masa\u00fcst\u00fc ya da web ya da mobil bir yaz\u0131l\u0131m geli\u015ftiricisiyseniz, bu kavramla hi\u00e7 tan\u0131\u015fmam\u0131\u015f olabilirsiniz. Hatta, g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131m geli\u015ftiricisi iseniz ve e\u011fer tek bir i\u015flemci ailesi ile \u00e7al\u0131\u015fma f\u0131rst\u0131 yakalam\u0131\u015f \u00e7ok... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2021-09-11T21:33:28+00:00","og_image":[{"width":32,"height":32,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2017\/12\/FeaturedImage-e1580417052514.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"10 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 41 &#8211; &#8220;Endiannes&#8221;","datePublished":"2021-09-11T21:33:28+00:00","dateModified":"2021-09-11T21:33:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/"},"wordCount":1046,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["big-endian","C++ 11","Endianness","little-endian","variadic templates"],"articleSection":["C++","Modern C++","Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/","name":"Haftal\u0131k C++ 41 - \"Endiannes\" - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2021-09-11T21:33:28+00:00","dateModified":"2021-09-11T21:33:28+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2021\/09\/11\/haftalik-c-41-endiannes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 41 &#8211; &#8220;Endiannes&#8221;"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2281"}],"version-history":[{"count":7,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2281\/revisions"}],"predecessor-version":[{"id":2289,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2281\/revisions\/2289"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/174"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}