Inversion de bit

Hello,

Je cherche à définir un type de fichier, je prend les 2 premiers octets:

uint16_t c; [data getBytes:&c length:2];

Je cherche à obtenir ce résultat:
0xffd8

mais j'obtiens
0xd8ff

alors je swap:
(c << 8) | ((c >> 8)

Ca fonctionne mais quand je cherche à avoir un retour via NSLog() les j'obtiens:
0xd8ffd8

NSLog(@Valeur hexa %02x, (c << 8) | (c >> 8));

alors que

uint16_t d = (c << 8) | (c >> 8);

NSLog(@Veleur hexa %02x, d);

j'obtiens
0xffd8

Une explication du pourquoi ?

Réponses

  • klogklog Membre
    avril 2019 modifié #2

    Parce que ton format d'affichage (%x) dans NSLog est un entier codé sur plus de 16 bits (32) donc c<<8 ne fera pas disparaitre les 8 bits supérieurs.

    Tu dois faire (dans le NSLog) :

    ((c & 0xFF) << 8) | (c >> 8)

    ou

    ((c << 8) & 0xFF00) | (c >> 8)

    ou

    ((c << 8) | (c >> 8)) & 0xFFFF

    ou ...

  • CéroceCéroce Membre, Modérateur

    @Harlo a dit :
    Une explication du pourquoi ?

    https://fr.wikipedia.org/wiki/Boutisme

    Il existe des fonctions dans Core Foundation pour échanger les bits selon le boutisme de la machine:
    CFSwapInt16HostToBig et compagnie.

    Il n'y a plus aujourd'hui dans les Mac que des processeurs Intel qui utilisent le petit-boutisme, mais dans le temps, nous avions des processeurs PowerPC qui utilisaient le gros-boutisme. Ces fonctions sont justement utiles parce qu'elles prennent en compte le boutisme de l'architecture pour laquelle le code est compilé.

  • Vous allez bien ensemble vous deux :D

    @Céroce a dit :
    Il existe des fonctions dans Core Foundation pour échanger les bits selon le boutisme de la machine:
    CFSwapInt16HostToBig et compagnie.

    Il n'y a plus aujourd'hui dans les Mac que des processeurs Intel qui utilisent le petit-boutisme, mais dans le temps, nous avions des processeurs PowerPC qui utilisaient le gros-boutisme. Ces fonctions sont justement utiles parce qu'elles prennent en compte le boutisme de l'architecture pour laquelle le code est compilé.

    Merci :)

  • @Draken a dit :
    T'as jamais eu à modifier un devis envoyé à une administration pour utilisation de mots technique n'appartenant pas à la nomenclature officielle ? Moi si, c'est plutôt agaçant, surtout à 11 heures du soir

    Il suffit d'attendre le lendemain matin... B)

    Non ? ;)

  • @Draken a dit :

    T'as jamais eu à modifier un devis envoyé à une administration pour utilisation de mots technique n'appartenant pas à la nomenclature officielle ? Moi si, c'est plutôt agaçant, surtout à 11 heures du soir

    Non les seules offres en français que j'ai eu à rédiger et rendre étaient pour l'état Luxembourgeois. Ils sont pas chiants sur les mots "officiels", y'en a pas. Sinon c'est quasiment que de l'anglais pour des multinationales avec des mots techniques et consensuels.

    Je trouve qu'on va trop loin en France avec ça. Même la Belgique où j'ai vécu pendant quelques temps n'a pas cette lourdeur du parler correct. Enfin si mais ça sera plus un problème de langue, pas un problème de mots...

    Au final en France le gros problème c'est qu'on veut être Français avant d'être industriel, commerçant ou autre. On te parle du grand besoin de créer le Google à la française, le Facebook à la française, du <truc qui marche mais qu'on a 15 ans de retard> à la française. Et on fini par vendre des calbuts made in France...

    Oui je vis assez mal mon retour en France après avoir vécu dans d'autres pays francophones... 😬

  • @Pyroh a dit :smile:
    Je trouve qu'on va trop loin en France avec ça. Même la Belgique où j'ai vécu pendant quelques temps n'a pas cette lourdeur du parler correct.

    Essaye le Quebec :)

  • @Harlo a dit :

    @Pyroh a dit :smile:
    Je trouve qu'on va trop loin en France avec ça. Même la Belgique où j'ai vécu pendant quelques temps n'a pas cette lourdeur du parler correct.

    Essaye le Quebec :)

    J'aimerai bien mais si Belgique et Luxembourg sont à 15 minutes de chez moi le Quebec est bien plus loin 😧
    Un jour sûrement.

Connectez-vous ou Inscrivez-vous pour répondre.