Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric Levenez
Le 27/01/07 12:46, dans , « » a écrit :
J'ai un buffer de bytes en C.
En C un byte est un char et peut faire de 1 à N octets de long. Typiquement un byte vaut 1 octet, mais cela n'est pas général.
J'ai trouver sous java que pour transformer un byte en entier on utilise : (buffer[0] & 0xff) | ((buffer[1] & 0xff) << 8) | ((buffer[2] & 0xff) << 16) | (buffer[3] << 24)
Est-ce la même chose en C?
Si buffer est un tableau de 4 entiers en Little Endian, alors la formule ci-dessus reconstruira un entier 32 bits.
Et si oui, pourriez-vous m'expliquer cette syntaxe?
(nb & 0xff) sert à masquer les 8 bits de poids faible d'en entier.
(nb << 8) décale à gauche les bits d'un entier (donc multiplication par 256).
(a | b) est un "ou" logique entre 2 entiers. Dans le cas présent, le | est comme un + car on mélange des bouts d'octets pour construire un grand nombre.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 27/01/07 12:46, dans
<1169898380.790630.36940@p10g2000cwp.googlegroups.com>,
« simon.bree@laposte.net » <simon.bree@laposte.net> a écrit :
J'ai un buffer de bytes en C.
En C un byte est un char et peut faire de 1 à N octets de long. Typiquement
un byte vaut 1 octet, mais cela n'est pas général.
J'ai trouver sous java que pour transformer un byte en entier on
utilise :
(buffer[0] & 0xff) | ((buffer[1] & 0xff) << 8) | ((buffer[2] & 0xff)
<< 16) | (buffer[3] << 24)
Est-ce la même chose en C?
Si buffer est un tableau de 4 entiers en Little Endian, alors la formule
ci-dessus reconstruira un entier 32 bits.
Et si oui, pourriez-vous m'expliquer cette
syntaxe?
(nb & 0xff) sert à masquer les 8 bits de poids faible d'en entier.
(nb << 8) décale à gauche les bits d'un entier (donc multiplication par
256).
(a | b) est un "ou" logique entre 2 entiers. Dans le cas présent, le | est
comme un + car on mélange des bouts d'octets pour construire un grand
nombre.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
En C un byte est un char et peut faire de 1 à N octets de long. Typiquement un byte vaut 1 octet, mais cela n'est pas général.
J'ai trouver sous java que pour transformer un byte en entier on utilise : (buffer[0] & 0xff) | ((buffer[1] & 0xff) << 8) | ((buffer[2] & 0xff) << 16) | (buffer[3] << 24)
Est-ce la même chose en C?
Si buffer est un tableau de 4 entiers en Little Endian, alors la formule ci-dessus reconstruira un entier 32 bits.
Et si oui, pourriez-vous m'expliquer cette syntaxe?
(nb & 0xff) sert à masquer les 8 bits de poids faible d'en entier.
(nb << 8) décale à gauche les bits d'un entier (donc multiplication par 256).
(a | b) est un "ou" logique entre 2 entiers. Dans le cas présent, le | est comme un + car on mélange des bouts d'octets pour construire un grand nombre.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Vincent Lefevre
Dans l'article <C1E0FD52.9C618%, Eric Levenez écrit:
Le 27/01/07 12:46, dans , « » a écrit :
J'ai un buffer de bytes en C.
En C un byte est un char et peut faire de 1 à N octets de long.
Et pas forcément un nombre entier d'octets, d'ailleurs.
J'ai trouver sous java que pour transformer un byte en entier on utilise : (buffer[0] & 0xff) | ((buffer[1] & 0xff) << 8) | ((buffer[2] & 0xff) << 16) | (buffer[3] << 24)
Est-ce la même chose en C?
Si buffer est un tableau de 4 entiers en Little Endian, alors la formule ci-dessus reconstruira un entier 32 bits.
À condition qu'il soit positif. Sinon c'est un comportement indéfini.