🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #12921

Re: Asignar a estructura entero

#12921
From: Ignacio Arenaza
Date: Sat, 05 May 2001 20:50
51 lines
2489 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

>>>>> "mangel" == mangel  <migarroi@eui.upv.es> writes:

    mangel> Pero al gcc no le parece nada bien. �Sabeis si hay alguna
    mangel> forma de hacerlo?  (o me va a tocar jugar con mascaras, a
    mangel> lo clasico, para obtener el valor de cada bit?).

Existe una forma a base de uniones, pero hay que garantizar que gcc te
empaqueta las estructuras de forma contigua (pragma pack o algo asi),
que la estructura va a ser empaquetada en exactamente 8 bits, que los
ints ocupan exactamente 32 bits y ademas solo funciona en aquitecturas
little-endian como el i386 (o big-endian si se quiere con una ligera
modificacion, pero no en ambas a la vez).

Con uniones se puede con:

        union int2struct {
                struct StatePort{
                  unsigned :4;
                  unsigned res4:1;
                  unsigned res3:1;
                  unsigned res1:1;
                  unsigned nores2:1;
                } estado[4];
                int nEstado;
        } mi_union;

        mi_union.nEstado = nEstado;
        mi_union.estado[0].res4 = 0;
        kk = mi_union.estado[0].nores2;
        ...

Como ves mucho lio para poca ganancia, ademas de un monton de
condicionantes que no existen en la version con mascaras. Creo que la
eleccion esta clara ;-)

Saludos. I�aki.

- -- 
  Get PGP/GPG Keys at http://www.escomposlinux.org/iarenaza/pgpkey.html

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: Processed by Mailcrypt and GPG

iD8DBQE69GeyZXLnGT1HLgcRAjgAAJ9lGxlWNrRxeZdbGiS2Wb7+U2NFggCeMyG/
hsZanhlZR6bu7z78IKpRdl4=
=dSSO
-----END PGP SIGNATURE-----
Technical Details
Message-ID: <873dajh64t.fsf@eb2ebu.ampr.org>
Path: arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!skynet.be!fu-berlin.de!newsfeed.bcn.ttd.net!news.bcn.ttd.net!not-for-mail
References: <3AF365B9.A0780DAF@eui.upv.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,5fd398f4a9723437
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2001-05-06 15:12:26 PST
Path: arc1-ca.pugleaf.net!newsfeed.google.com!newsfeed.stanford.edu!skynet.be!fu-berlin.de!newsfeed.bcn.ttd.net!news.bcn.ttd.net!not-for-mail
From: Ignacio Arenaza <iarenaza@eb2ebu.ampr.org>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Asignar a estructura entero
Date: 05 May 2001 22:50:58 +0200
Organization: Servidor NNTP de eb2ebu.ampr.org
Lines: 51
Message-ID: <873dajh64t.fsf@eb2ebu.ampr.org>
References: <3AF365B9.A0780DAF@eui.upv.es>
NNTP-Posting-Host: 213.96.129.167
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7