Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's a template based version:</p> <pre><code>#include &lt;iostream&gt; #include &lt;iomanip&gt; enum endianness_t { BIG, // 0x44332211 =&gt; 0x44 0x33 0x22 0x11 LITTLE, // 0x44332211 =&gt; 0x11 0x22 0x33 0x44 UNKNOWN }; const uint32_t test_value = 0x44332211; const bool is_little_endian = (((char *)&amp;test_value)[0] == 0x11) &amp;&amp; (((char *)&amp;test_value)[1] == 0x22); const bool is_big_endian = (((char *)&amp;test_value)[0] == 0x44) &amp;&amp; (((char *)&amp;test_value)[1] == 0x33); const endianness_t endianness = is_big_endian ? BIG: (is_little_endian ? LITTLE : UNKNOWN); template &lt;typename T&gt; T identity(T v){ return v; } // 16 bits values ------ uint16_t swap_(uint16_t v){ return ((v &amp; 0xFF) &lt;&lt; 8) | ((v &amp; 0xFF00) &gt;&gt; 8); } // 32 bits values ------ uint32_t swap_(uint32_t v){ return ((v &amp; 0xFF) &lt;&lt; 24) | ((v &amp; 0xFF00) &lt;&lt; 8) | ((v &amp; 0xFF0000) &gt;&gt; 8) | ((v &amp; 0xFF000000) &gt;&gt; 24); } template &lt;typename T, endianness_t HOST, endianness_t REMOTE&gt; struct en_swap{ static T conv(T v){ return swap_(v); } }; template &lt;typename T&gt; struct en_swap&lt;T, BIG, BIG&gt;{ static T conv(T v){ return v; } }; template &lt;typename T&gt; struct en_swap&lt;T, LITTLE, LITTLE&gt; { static T conv(T v){ return v; } }; template &lt;typename T&gt; T to_big(T v) { switch (endianness){ case LITTLE : return en_swap&lt;T,LITTLE,BIG&gt;::conv(v); case BIG : return en_swap&lt;T,BIG,BIG&gt;::conv(v); } } template &lt;typename T&gt; T to_little(T v) { switch (endianness){ case LITTLE : return en_swap&lt;T,LITTLE,LITTLE&gt;::conv(v); case BIG : return en_swap&lt;T,BIG,LITTLE&gt;::conv(v); } } int main(){ using namespace std; uint32_t x = 0x0ABCDEF0; uint32_t y = to_big(x); uint32_t z = to_little(x); cout &lt;&lt; hex &lt;&lt; setw(8) &lt;&lt; setfill('0') &lt;&lt; x &lt;&lt; " " &lt;&lt; y &lt;&lt; " " &lt;&lt; setw(8) &lt;&lt; setfill('0') &lt;&lt; z &lt;&lt; endl; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload