1

Ce sujet est issu d'une discussion ayant dérivé sur deux thèmes distincts. Pour vous rendre sur le sujet d'origine, merci de cliquer sur ce lien
avatar
Ben, bouh, quoi :D

2

j'ai envie de tuer celui qui a inventé le mot little endian gol
//Write little endian file size
outFile.write((length       )&0xff);
outFile.write((length >>>  8)&0xff);
outFile.write((length >>> 16)&0xff);
outFile.write((length >>> 24)&0xff);

3

>>> ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

4

Tue plutôt le créateur du C, ou mieux encore, celui qui a décrété que c'était un langage portable.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

5

Je vois mal comment régler ce problème, quel que soit le langage.
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

6

Mettre des fonctions d'I/O indépendantes de l'implémentation dans les libs standards, comme c'est le cas en C# par exemple.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

7

Faudrait que je vous montre mes macros... mais on n'est pas assez intimes pour cela :/

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

8

T'inquiète, on doit avoir à peu près les mêmes tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

9

Ximoon (./10987) :
>>> ?
Ben, décalage à droite sans étendre le msb.

10

squalyl (./10986) :
j'ai envie de tuer celui qui a inventé le mot little endian gol
//Write little endian file size
outFile.write((length       )&0xff);
outFile.write((length >>>  8)&0xff);
outFile.write((length >>> 16)&0xff);
outFile.write((length >>> 24)&0xff);
tu pourrais te faire une fonction, quand même cheeky


(mais pencil)

11

Tiens il me semblait que >>> était carrément pas portable (enfin pas supporté par les compilos). De toute façon tu n'as pas besoin de ça, l'opérateur habituel va très bien.
unsigned i = 4;
while (i--) {
    outFile.write(length & 255);
    length >>= 8;
}
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

12

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);

sont tes amis smile
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

">>>" n'est pas dans la liste des opérateurs standard du C ; ">>" peut ou non étendre le MSB lorsqu'il est appliqué à un nombre signé, ça dépend de l'implémentation.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

14

Je sais pas pour la portabilité... Il me semblait aussi que c'était plutôt du Javascript cheeky (cross : OK)
(les masques en décimal, çay mal couic)
(et c'est étrange de choisir un while alors que i est utilisé seulement dans la bouche tongue)

15

Brunni (./10995) :
Tiens il me semblait que >>> était carrément pas portable (enfin pas supporté par les compilos).
Tout dépend du langage : si c'est du Java, ca l'est.
Zerosquare (./10990) :
Mettre des fonctions d'I/O indépendantes de l'implémentation dans les libs standards, comme c'est le cas en C# par exemple.
C'est aussi le cas en java, mais comme tu peux lire/recevoir des données qui ont été générées par des programmes non java, le problème existe quand même
avatar

16

Bref, c'est indémerdable.
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

17

squalyl (./10986) :
j'ai envie de tuer celui qui a inventé le mot little endian gol.gif
Jonathan Swift ? le pauvre sad (enfin il est déjà mort depuis trois siècles de toute façon cheeky)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

18

Non, c'est quand même mieux de pouvoir s'affranchir de ce problème pour ses propres programmes...

Sally : tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

19

20

(int b) throws IOException; // ... }Auquel cas le masque « &0xFF » est inutile :public abstract class OutputStream implements Closeable, Flushable { /** * Writes the specified byte to this output stream. The general * contract for <code>write</code> is that one byte is written * to the output stream. The byte to be written is the eight * low-order bits of the argument <code>b</code>. The 24 * high-order bits of <code>b</code> are ignored. * <p> * Subclasses of <code>OutputStream</code> must provide an * implementation for this method. * * @param b the <code>byte</code>. * @exception IOException if an I/O error occurs. In particular, * an <code>IOException</code> may be thrown if the * output stream has been closed. */ public abstract void write
avatar
Je ne suis pas développeur Java : je suis artiste Java.
Ce que l’on conçoit bien s’énonce clairement, / Et le code pour l’écrire arrive aisément.
Hâtez-vous lentement ; toujours, avec méthode, / Vingt fois dans l’IDE travaillez votre code.
La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer.
You don't use science to show that you're right, you use science to become right.

21

Si c'est du java alors tu peux aussi utiliser les "nio" la classe ByteBuffer peut fonctionner soit en bigendian soit en littleendian.
avatar

22

squalyl (./11003) :
pour info c'était du java cheeky

Alors souffre!
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

23

Zerosquare (./10992) :
T'inquiète, on doit avoir à peu près les mêmes tongue

Pas forcément, regarde :

  /* Endian conversion, Kochise's way */

  #define B2L_08(t)         ((t)&0x0FF)
  #define B2L_16(t)         (B2L_08((t)>>8))|(B2L_08((t)&0x000000FF))<<8
  #define B2L_32(t)         (B2L_16((t)>>16))|(B2L_16((t)&0x0000FFFF))<<16
  #define B2L_64(t)         (B2L_32((t)>>32))|(B2L_32((t)&0xFFFFFFFF))<<32

  #define L2B_08(t)         B2L_08(t)
  #define L2B_16(t)         B2L_16(t)
  #define L2B_32(t)         B2L_32(t)
  #define L2B_64(t)         B2L_64(t)

Ce qui donne :
//Write little endian file size
outFile.write(B2L_32(length));

"Magie !" (c) Jasmine

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

24

Intéressant, mais je préfère les macros qui sont indépendantes de l'endianness de la machine sur laquelle on compile, comme ça c'est vraiment portable smile

(ceci dit, on devrait créer un nouveau sujet)
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

25

./11007 Et ils servent à quoi tous ces masques ?
  /* Endian conversion, Kochise's way (enfin presque) */

  #define B2L_08(t)         ((t)&0x0FF)
  #define B2L_16(t)         (B2L_08((t)>>8)|B2L_08(t)<<8)
  #define B2L_32(t)         (B2L_16((t)>>16)|B2L_16(t)<<16)
  #define B2L_64(t)         (B2L_32((t)>>32)|B2L_32(t)<<32)

  #define L2B_08(t)         B2L_08(t)
  #define L2B_16(t)         B2L_16(t)
  #define L2B_32(t)         B2L_32(t)
  #define L2B_64(t)         B2L_64(t)

Ça ne donne pas la même chose ?
avatar

26

Zerosquare (./11008) :
Intéressant, mais je préfère les macros qui sont indépendantes de l'endianness de la machine sur laquelle on compile, comme ça c'est vraiment portable smile

Certes, mais comme K&R n'y ont pas pensés, ce n'est pas inclus dans le langage et il faut le faire à-la-mano. Dans ma boite à outils, j'ai toute une chiée de macros du même genre afin que ce soit factorisable par le compilateur...
RHJPP (./11009) :
./11007 Et ils servent à quoi tous ces masques ? [...] Ça ne donne pas la même chose ?

Essaye, tu vas voir (c'est à cause de la récursion des macros qui est ensuite factorisée par le compilateur -les décalages sont simplifiés- ça évite la collision des bits à cause de la fonction OU logique tongue )

L'avantage, t'y colles n'importe quoi, du __int8 au __int64 sans avoir à caster, c'est implicite !

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

27

J'aurai plutôt fait comme ça moi:
#define ENDIANNESS_SWAP_08(t)         ((t)&0x0FF)
#define ENDIANNESS_SWAP_16(t)         ((B2L_08((t)>>8))|(B2L_08((t)&0x000000FF))<<8)
#define ENDIANNESS_SWAP_32(t)         ((B2L_16((t)>>16))|(B2L_16((t)&0x0000FFFF))<<16)
#define ENDIANNESS_SWAP_64(t)         ((B2L_32((t)>>32))|(B2L_32((t)&0xFFFFFFFF))<<32)

#ifdef BIG_ENDIAN
#define TO_BE_08(n) (n)
#define TO_BE_16(n) (n)
#define TO_BE_32(n) (n)
#define TO_BE_64(n) (n)

#define TO_LE_08(n) ENDIANNESS_SWAP_08(n)
#define TO_LE_16(n) ENDIANNESS_SWAP_16(n)
#define TO_LE_32(n) ENDIANNESS_SWAP_32(n)
#define TO_LE_64(n) ENDIANNESS_SWAP_64(n)
#else
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN
#endif
#define TO_BE_08(n) ENDIANNESS_SWAP_08(n)
#define TO_BE_16(n) ENDIANNESS_SWAP_16(n)
#define TO_BE_32(n) ENDIANNESS_SWAP_32(n)
#define TO_BE_64(n) ENDIANNESS_SWAP_64(n)

#define TO_LE_08(n) (n)
#define TO_LE_16(n) (n)
#define TO_LE_32(n) (n)
#define TO_LE_64(n) (n)
#endif
C'est beaucoup plus propre. tongue
En plus tu as oublié les parenthèses autour de tes macro (je les ai rajouté), donc elles ne fonctionnent pas correctement dans tous les cas d'utilisation…
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

28

Nan c'est pas plus propre (ton code est plus long et donc plus difficilement maintenable) puisque dans un cas comme dans l'autre, qu'importe l'endianesse de la machine, ça marche, pas besoin de compilation conditionnelle. Pour les parenthèses, en principe tu n'en as pas besoin (sauf peut être _64(t)) car c'est compris de façon récursif dans les appels de macro (regarde comment (t) est systématiquement protégé entre parenthèses)

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

29

B2L_16(32768) + B2L_16(32768) donne donc le bon résultat ? (256)

Ton truc est crade parce que tu vas utiliser "B2L_" ou bien "L2B_" quelle que soit l'architecture de la machine sur le code est compilé… Ce que font tes macros c'est permuter l'odre des octets, et rien d'autre, y'a donc pas lieu de les nommer B2L ou L2B car c'est juste faux…
avatar
Le scénario de notre univers a été rédigée par un bataillon de singes savants. Tout s'explique enfin.
T'as un problème ? Tu veux un bonbon ?
[CrystalMPQ] C# MPQ Library/Tools - [CrystalBoy] C# GB Emulator - [Monoxide] C# OSX library - M68k Opcodes

30

./11010 Je viens de tester avec ./11009 et ça fonctionne très bien...
avatar