Bonjour,
pour convertir un fichier ebcdic en ascii je fais ça

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
 
 
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <ctype.h>
#include <stdlib.h>
#include <unistd.h>
 
extern const unsigned char ebcdic_to_ascii [256] =
{
 0  , 1  , 2  , 3  , 156, 9  , 134, 127, 151, 141, 10, 11 , 12 , 13 , 14 , 15 ,
 16 , 17 , 18 , 19 , 157, 133, 8  , 135, 24 , 25 , 146, 143, 28 , 29 , 30 , 31 ,
 128, 129, 130, 131, 132, 10 , 23 , 27 , 136, 137, 138, 139, 140, 5  , 6  , 7  ,
 144, 145, 22 , 147, 148, 149, 150, 4  , 152, 153, 154, 155, 20 , 21 , 158, 26 ,
 32 , 160, 161, 162, 163, 164, 165, 166, 167, 168, 91 , 46 , 60 , 40 , 43 , 33 ,
 38 , 169, 170, 171, 172, 173, 174, 175, 176, 177, 93 , 36 , 42 , 41 , 59 , 94 ,
 45 , 47 , 178, 179, 180, 181, 182, 183, 184, 185, 124, 44 , 37 , 95 , 62 , 63 ,
 186, 187, 188, 189, 190, 191, 192, 193, 194, 96 , 58 , 35 , 64 , 39 , 61 , 34 ,
 195, 97 , 98 , 99 , 100, 101, 102, 103, 104, 105, 196, 197, 198, 199, 200, 201,
 202, 106, 107, 108, 109, 110, 111, 112, 113, 114, 203, 204, 205, 206, 207, 208,
 209, 126, 115, 116, 117, 118, 119, 120, 121, 122, 210, 211, 212, 213, 214, 215,
 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
 123, 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 232, 233, 234, 235, 236, 237,
 125, 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 238, 239, 240, 241, 242, 243,
 92 , 159, 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 244, 245, 246, 247, 248, 249,
 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 250, 251, 252, 253, 254, 255
 
};
 
 
 
int file_conv (const char *FileSource, const char *FileDest)
{
  int ret = 0;
  FILE *src = NULL;
  FILE *dst = NULL;
  /*char buffer[BUFSIZ];*/
 
 
 
   int buffer_size = 255;
   int taille_source = FileSource->Size;
   if(taille_source<buffer_size){
          buffer_size =  taille_source;
          char * buffer = new char[buffer_size];
          FileSource->Read(buffer,buffer_size);
          for(int i=0;i<buffer_size;i++){
            //unsigned pour obtenir un entier>0 pour les caractères dont la valeur>127
             unsigned char c = buffer[i];
             unsigned char c2 = ebcdic_to_ascii[(int)c];
             buffer[i]= c2;
          }
          FileDest->Write(buffer,buffer_size);
          delete buffer;
   }else{
       int nb_be = taille_source / buffer_size; //nombre de boucle contenant
       int nbc_restants =  taille_source % buffer_size;
       for(int i=0;i<nb_be;i++){
          char * buffer = new char[buffer_size];
          FileSource->Read(buffer,buffer_size);
          for(int i=0;i<buffer_size;i++){
             unsigned char c = buffer[i];
             unsigned char c2 = ebcdic_to_ascii[(int)c];
             buffer[i]=c2;
          }
          FileDest->Write(buffer,buffer_size);
          delete buffer;
       }
       if(nbc_restants!=0){
          char * buffer = new char[nbc_restants];
          FileSource->Read(buffer,nbc_restants);
          for(int i=0;i<nbc_restants;i++){
             unsigned char c = buffer[i];
             unsigned char c2 =ebcdic_to_ascii[(int)c];
             buffer[i]= c2;
          }
          FileDest->Write(buffer,nbc_restants);
          delete buffer;
       }
   }
   delete  FileSource;
   delete  FileDest;
}
Merci