IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

conversion binaire hexa


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut conversion binaire hexa
    bonjour à tous ! voila je dois créer un programme permettant de convertir en utf en c++ mais j'ai du mal...

    actuellement j'ai plusieurs fonctions permettant partir de ma chaine de caractère de convertir en binaire mon code hexa mais là je bloque sur le fait que je dois regarder le nombre d'octet pour insérer du code selon le nombre d'octect pour arriver a une conversion en utf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    int binTodec(string b){
    	int returned = 0;
    	for(unsigned int i=0; i<b.size();i++)
    		if(b[i] == '1')
    			returned += pow(2,b.size()-i-1);
     
    	return returned;
    } 
     
    string hexToBin(string hexa){
    	string binaire;
    	for(unsigned int i=0;i<hexa.size();i++){
    		switch(hexa[i]){
     
    			case 0 : 
    				binaire +="0000";
    				break;
     
    			case 1 : 
    				binaire +="0001";
    				break;
     
    			case 2 : 
    				binaire +="0010";
    				break;
     
    			case 3 : 
    				binaire +="0011";
    				break;
     
    			case 4 : 
    				binaire +="0100";
    				break;
     
    			case 5 : 
    				binaire +="0101";
    				break;
     
    			case 6 : 
    				binaire +="0110";
    				break;
     
    			case 7 : 
    				binaire +="0111";
    				break;
     
    			case 8 : 
    				binaire +="1000";
    				break;
     
    			case 9 : 
    				binaire +="1001";
    				break;
     
    			case 10 : 
    				binaire +="1010";
    				break;
     
    			case 11 : 
    				binaire +="1011";
    				break;
     
    			case 12 : 
    				binaire +="1100";
    				break;
     
    			case 13 : 
    				binaire +="1101";
    				break;
     
    			case 14 : 
    				binaire +="1110";
    				break;
     
    			case 15 : 
    				binaire +="1111";
    				break;
     
    		}
    	}
    	return binaire;
    }
     
    string removeZeroLeft(string hex){
    	string result = "";
    	int idBegin = 0;
     
    	while(hex[idBegin] != '1')
    		idBegin ++;
     
    	for(int i=idBegin; i < hex.size(); ++i)
    		result += hex[i];
     
    	return result;
    }
     
    int binToOtect(string result){
     
    	string octect;
     
    if(binTodec(result) <= 127){
     
    }
    if(binTodec(result) <= 2047 && binTodec(result) >127){
     
    }
     
    if(binTodec(result) >= 2047 && binTodec < 65534){
     
    }
        if(binTodec(result) <= 65 534 &&   binTodec >= 1 048 575){
     
        }
     
    }
    Je ne sais pas comment faire pour insérer ça :

    U+0000 à U+007F 0xxxxxxx 00 à 7F 1 octet codant 1 à 7 bits
    U+0080 à U+07FF 110xxxxx 10xxxxxx C2 à DF 2 octets codant 8 à 11 bits
    U+0800 à U+0FFF 11100000 101xxxxx 10xxxxxx

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 760
    Par défaut
    C'est très simple:

    Pour avoir "un nombre" sur 2, 3 ou 4 octets, on ne peut pas vraiment faire confiance aux types de base.
    Donc unsigned char[2], unsigned char[3], unsigned char[4]

    Pour le décimal et l'hexadécimal tu as compris

    Pour le binaire, 2-3 trucs ... pour du tripotage de bits en règle

    1) Mettre des bits à 0 ou 1 -> OU (mais pas le OU logique). Exemple: 11010000 = (0X00 | 0XD0) (*)

    2) Prendre des bits -> Shift (décalage). Exemple: ((00010100 >> 2) & 0X07) = 0X05 (00000101)

    3) Le décalage fonctionne de l'autre sens. Exemple: (00000101 << 5) = 10100000

    4) Faire un masque avec un ET (mais pas le ET logique). Exemple: 11110111 & 00011100 = 00010100 (on a pris les bits 4, 5, et 6 en partant de la gauche)


    * -> Je me demande si on ne pas utiliser le ET (mais pas le ET logique) Mais cela dépend de la valeur de tes données.
    Bousk a répondu à mon interrogation c'est un ET, mais il faut initialiser ces données à 0 sinon ça ne gagne pas

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut !
    merci à toi pour ta réponse donc j'ai juste a faire unsignedchar[0]="1"+binTodec(result) si je comprends bien ?

    et pour en insérer dans ma chaine ? je dois faire une boucle et compter ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 760
    Par défaut
    Citation Envoyé par iTEEECH Voir le message
    et pour en insérer dans ma chaine ? je dois faire une boucle et compter ?
    Je ne vois pas vraiment ce que tu veux faire , mais cela doit être un truc style (non testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include<vector>
    #include<iostream>
     
     
    unsigned int /*unsigned long*/ my_pow(unsigned char radix, unsigned short nb) { return ((nb != 0)? (radix * my_pow(radix, nb - 1)): 1); }
     
     
    int main(/*int argc, char* argv[]*/) {
    	unsigned char test = 159;
    	std::vector<unsigned char> str;
     
    	str.reserve(8);
     
    	for(unsigned char pos = 0; pos < 8; ++pos) { str.push_back((test & my_pow(2, (7 - pos)))? '1': '0');  }
     
    	std::vector<unsigned char>::iterator it = str.begin();
     
    	for(; it != str.end(); ++it) { std::cout << (unsigned char) (*it); }
    	std::cout << std::endl;
     
    	return 0;
    }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,
    je n'ai absolument rien compris à ce que tu veux faire.

    Mettre des bits à 0 ou 1 -> OU
    Pour mettre un bit à 0, c'est le ET qu'il faut utiliser.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci de votre aide !! je vais tester ça car là je n'ai pas vraiment eu le temps avec les révisions pour les examens cette semaine.

    Enfaite pour être plus claire je dois faire ça :
    Par exemple je rentre :U+00A2 -> 0000 0000 1010 0010 -> 1010 0010 -> 1100 xxxx 10xx xxxx -> 1100 0010 1010 0010 -> C2 A2

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/05/2015, 20h10
  2. Conversion binaire -> hexa
    Par dustyg dans le forum Débuter
    Réponses: 1
    Dernier message: 03/06/2009, 12h19
  3. Conversion ascii=> hexa=>binaire
    Par grunk dans le forum C++
    Réponses: 3
    Dernier message: 27/11/2005, 18h45
  4. Conversion binaire -> hexadecimal
    Par barthelv dans le forum C
    Réponses: 2
    Dernier message: 06/08/2003, 10h40
  5. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo