Convertir int en 16bits

Convertir int en 16bits - C++ - Programmation

Marsh Posté le 15-08-2014 à 16:57:54    

Bonjour,
 
Je voudrais savoir s'il y a un moyen simple de convertir un int en un nombre de 16bits en C++...
 
Merci d'avance !

Reply

Marsh Posté le 15-08-2014 à 16:57:54   

Reply

Marsh Posté le 15-08-2014 à 23:46:09    

Bonjour !
 
Je pense que vous exprimez mal votre problème (ou que ce n'est pas tout à fait clair dans votre formulation) ...
 
Sinon  

Code :
  1. int integer=3;
  2. uint16_t nombre16bits = reinterpret_cast<uint16_t>(integer);


 
Mais je suis certain que ce n'est pas du tout ce que vous avez en tête, mais comme je n'arrive pas à cerner précisément ce que vous avez en tête, je ne peux guère vous proposer mieux :)

Reply

Marsh Posté le 15-08-2014 à 23:54:45    

Dans ce cas, c'est pas plutôt un static_cast qu'il faut ?


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 18-08-2014 à 10:46:23    

Bonjour,
 
En effet, ma question n'est pas assez clairement formulée, mais je me rends compte que moi même j'avais mal saisi ce que l'on me demandait...
Merci pour vos réponses,
Au fait, je pensais que l'on me demandait seulement de convertir les int en chaines de caractères de 16bits et de les stocker dans un fichier, mais après explication, ils veulent que j'écrive directement dans un fichier binaire sous format 16bits, sachant que la lecture du fichier de base est en ASCII.
Les fichiers de mesures ressemblent à ça :
12 13.2 158 10
11.1 15 10.1 15
...
J'extrais chaque colonne (correspondant à une donnée en particulier), et l'écris dans un fichier séparé, mais on me demande de ne pas l'écrire telle quelle, mais de créer des fichiers binaires où elles seront écrites en 16bits...
Quelqu'un peut-il m'éclairer?
 
Ci-dessous le code à l'état actuel :

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. int main()
  5. {
  6. using namespace std;
  7. ifstream liste("liste_de_fichiers.txt", ios::in);
  8. if(liste)
  9. {
  10.  string lisligne;
  11.  string filename0, filename1,filename2,filename3,filename4;
  12.  string ligne;
  13.  double doublea,doubleb,doublec,doubled,doublee,doublef;
  14.  double double1, double2, double3, double4, double5, double6;
  15.  while(getline(liste, lisligne))
  16.  {
  17.    liste >> filename0; //lecture du nom de fichier dans un fichier "liste de fichiers"
  18.    filename1 = "/home/rs/Desktop/eclats/" + filename0 + "_1"; //création du nom du fichier où sera retranscrite la colonne 1
  19.    filename2 = "/home/rs/Desktop/eclats/" + filename0 + "_2"; //colonne 2
  20.    filename3 = "/home/rs/Desktop/eclats/" + filename0 + "_3"; // 3
  21.    filename4 = "/home/rs/Desktop/eclats/" + filename0 + "_4"; // 4
  22.    filename0 = "/home/rs/Desktop/données_modèles/données_modèles/2011/" + filename0; //Nom du fichier de base (avec toutes les colonnes)
  23.    ifstream fichier0(filename0.c_str(), ios::in); //fichier lecture
  24.    ofstream fichier1(filename1.c_str(), ios::out); // ecritures
  25.    ofstream fichier2(filename2.c_str(), ios::out);
  26.    ofstream fichier3(filename3.c_str(), ios::out);
  27.    ofstream fichier4(filename4.c_str(), ios::out);
  28.    if(fichier0 && fichier1 && fichier2 && fichier3 && fichier4)
  29.     {
  30.       fichier0 >> doublea >> doubleb >> doublec >> doubled >> doublee >> doublef; //lecture des 6 colonnes
  31.       //retranscription d'une colonne par fichier        
  32.       fichier1 << doublec*100;
  33.       fichier2 << doubled*100;
  34.       fichier3 << doublee*100;
  35.       fichier4 << doublef*100;
  36.      while(getline(fichier0, ligne))  // tant que l'on peut mettre la ligne dans "contenu"
  37.      {
  38.         fichier0 >> double1 >> double2 >> double3 >> double4 >> double5 >> double6;
  39.         fichier1 << double3*100;
  40.         fichier2 << double4*100;
  41.         fichier3 << double5*100;
  42.         fichier4 << double6*100;
  43.      }
  44.      //fichiers traités
  45.      cout<<filename0<<endl;
  46.      cout<<filename1<<endl;
  47.      cout<<filename2<<endl;
  48.      cout<<filename3<<endl;
  49.      cout<<filename4<<endl;
  50.     }
  51.     else
  52.      cerr<<"Impossible d'ouvrir le fichier!1"<<endl;
  53.  }
  54.  liste.close();
  55. }
  56. else
  57.  cerr<<"Impossible d'ouvrir le fichier!"<<endl;
  58. return 0;
  59. }


Merci d'avance !

Reply

Marsh Posté le 19-08-2014 à 10:43:07    

En 16 bits big endian, ou little endian?
Un élément de réponse ici: http://www.cplusplus.com/articles/DzywvCM9/
 
Notes que si C++ ne t'es pas imposé, ce que tu veux faire, c'est juste quelques lignes de Perl (ou de Python, probablement).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 09-09-2014 à 12:46:15    

Merci pour ta réponse, et désolé de ne plus avoir donné de nouvelles, j'étais en déplacement.
Au fait la consigne n'était peut être pas assez claire, et ce qu'on voulait de moi était simplement de stocker les nombres sous forme binaire, ce que j'ai fais grace à la fonction write !

Reply

Marsh Posté le 10-09-2014 à 10:47:51    

Il y a par exemple la technique donnée en première réponse ici:
http://stackoverflow.com/questions [...] -file-io-c
A+,


Message édité par gilou le 10-09-2014 à 10:49:16

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed