🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309588

Re: Zmiana Endiana

#309588
From: Wojciech Muła
Date: Fri, 05 Jan 2018 21:36
30 lines
2617 bytes
On Friday, January 5, 2018 at 8:41:46 PM UTC+1, bartekltg wrote:
> On Thursday, January 4, 2018 at 10:45:26 AM UTC+1, Radoslaw Szwed wrote:
> > Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości news:p2j4cs$g35$1@node1.news.atman.pl...
> > > Jak przekonwertować między Big Endian a Little Endian w c++?
> > > zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?
> > 
> > Tak na marginesie przypomnę, że procesory od 486 mają sprzętowe rozwiązanie rozkaz
> > BSWAP reg32
> > 
> > Rozkaz zajmuje 2 bajty i 1 cykl zegara.
> 
> Są nawet 'intrinsty', przynajmniej w gcc i VS. Dla 16/32/64 bitów. 

Nie ma potrzeby ich stosowania, taki kod

#include <cstdint>

uint32_t swap(const uint32_t x) {
    const uint32_t b0 = (x >> (0*8)) & 0xff;
    const uint32_t b1 = (x >> (1*8)) & 0xff;
    const uint32_t b2 = (x >> (2*8)) & 0xff;
    const uint32_t b3 = (x >> (3*8)) & 0xff;

    return (b0 << (3*8)) | (b1 << (2*8)) | (b2 << (1*8)) | b3;
}

zostanie przetłumaczony na jeden bswap przez GCC, clanga i MSVC.
Co ciekawe, intelowski kompilator nie umie tak. :)

w.
Technical Details
Message-ID: <57b9543f-97df-49ef-8be4-4f271177a837@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g35no1118194qtk.1!news-out.google.com!v55ni430qtc.0!nntp.google.com!m31no1123435qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <p2j4cs$g35$1@node1.news.atman.pl> <p2kt3j$pkj$1@gioia.aioe.org> <0f5b01ea-5c24-4585-aa87-f652f629cb95@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.237.42.53 with SMTP id c50mr3100173qtd.53.1515188213699;        Fri, 05 Jan 2018 13:36:53 -0800 (PST)
X-Received: by 10.31.168.202 with SMTP id r193mr426561vke.4.1515188213348; Fri, 05 Jan 2018 13:36:53 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!g35no1118194qtk.1!news-out.google.com!v55ni430qtc.0!nntp.google.com!m31no1123435qtf.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Fri, 5 Jan 2018 13:36:53 -0800 (PST)
In-Reply-To: <0f5b01ea-5c24-4585-aa87-f652f629cb95@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2a01:112f:80d:ee00:d6be:d9ff:fe09:8928; posting-account=VFwkXwoAAADdT4-lLKRZrMYkTjizGoyn
NNTP-Posting-Host: 2a01:112f:80d:ee00:d6be:d9ff:fe09:8928
References: <p2j4cs$g35$1@node1.news.atman.pl> <p2kt3j$pkj$1@gioia.aioe.org> <0f5b01ea-5c24-4585-aa87-f652f629cb95@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <57b9543f-97df-49ef-8be4-4f271177a837@googlegroups.com>
Subject: Re: Zmiana Endiana
From: Wojciech Muła <wojciech_mula@poczta.onet.pl>
Injection-Date: Fri, 05 Jan 2018 21:36:53 +0000
Lines: 33
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit