Hex geht leider net :(

S

Sg

Hallo,
wollte eine Dateie erstmal Binär in ein Array einlesen was auch klappt und dann Hexadezimal ausgeben.
Habe mir folgendes dabei gedacht ;)
C++:
#include <stdio.h>
#include <iostream>
using namespace std;

void hex(int x, char *pointer1 , char *pointer2)
{      
    char string[200];
    int tarray[200];
    int zarray[200]; 
    int i=0; 
    
    zarray[0]=x;
    
    while(zarray[i]!=0)
    {
    tarray[i]=zarray[i] % 16;
    zarray[i+1]= zarray[i] / 16;
    i++;
    }   
    
    for(int x=i-1;x!=-1;x--) //i-1 ist die länge des arrays
    {    
    switch (tarray[x])
    {
    case 0: string[x]= '0' ; break ;
    case 1: string[x]= '1' ; break ;
    case 2: string[x]= '2' ; break ;
    case 3: string[x]= '3' ; break ;
    case 4: string[x]= '4' ; break ;
    case 5: string[x]= '5' ; break ;
    case 6: string[x]= '6' ; break ;
    case 7: string[x]= '7' ; break ;
    case 8: string[x]= '8' ; break ;
    case 9: string[x]= '9' ; break ;
    case 10: string[x]= 'A' ; break ;
    case 11: string[x]= 'B' ; break ;
    case 12: string[x]= 'C' ; break ;
    case 13: string[x]= 'D' ; break ;
    case 14: string[x]= 'E' ; break ;
    case 15: string[x]= 'F' ; break ;    
    }                                                                                      
    }
    
    pointer1=&string[0];
    pointer2=&string[1];

}

int main(void)
{
  
  int array[20000];  
  int i=0;
  int c,x;				
  char lol;
  FILE *ptr;		
				  
  ptr = fopen("Datei.exe","r");
				
  for(;(c = fgetc(ptr))!= EOF;) 
  {
  array[i]=c;
  i++;		
  }
  
  fclose(ptr);
  
  for(x=0;x<i;x++)
  {
  cout << array[x];          // Hier kommt die Ausgabe als Dezimalzahlen    
  }				
  
  char *pointer1;                          //Ab hier kommt die Ausgabe als Hex
  char *pointer2;  
  int f;  
  for(x=0;x<i;x++)
  {
  f=array[x];     
  hex(f,pointer1,pointer2);
  cout << pointer2 <<pointer1;          
  }
  
  getchar();
  getchar();
}

An sich geht das umwandeln der Zahlen aber hier gehts irgenwie net :(
Vlt. findet ihr was ;) Danke

PS: Da stimmt irgendwas an der Funktion nicht, weil wenn ich es ohne mache geht es >.<
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Warum machst du's so kompliziert? Du kannst doch die Zeichen einfach hexadezimal ausgeben. Du mußt auch nicht die ganze Datei in den Speicher einlesen.
C++:
cout << hex;

int c;
while ((c = fgetc(ptr)) != EOF) {
  cout << c;
}

Deine Fehler liegen in der Verwendung der Zeiger. Um Ausgabeparameter zu verwenden, mußt du den Speicher für diese Parameter bereits vor dem Funktionsaufruf allozieren. Und du mußt den Wert des Zeigers auch verändern. Du weist stattdessen die Adresse einer lokalen Variablen an die Kopie der übergebenen Zeiger zu. Das hat natürlich keinen Effekt. Du müßtest es so machen:
C++:
void hex(int x, char *pointer1 , char *pointer2) {
  ...
  *pointer1 = string[0];
  *pointer2 = string[1];
}

char c1;                          //Ab hier kommt die Ausgabe als Hex
char c2;

hex(f, &c1, &c2);
Auch das könntest du vereinfachen, wenn du einfach gleich einen C-String übergibst, den du dann veränderst.

Gruß
 
Zuletzt bearbeitet:
Hallo Vielen Danke für die Aufklärende Antwort !

Kann ich echt die Zeichen gleich Hexdezimal in nen Array schreiben :eek:

Nochmals Danke und Gruß
 
Hi.

Du könntest die Umwandlung folgendermaßen vornehmen:
C++:
void char2hex(char c, char* out)                                                                              
{                                                                                                             
                                                                                                              
    unsigned char octet = (unsigned char)c;                                                                   
                                                                                                              
    out[0] = (octet >= 0xA0 ? 'A' - 10 : '0') + (octet / 16);                                                 
    octet %= 16;                                                                                              
    out[1] = (octet >= 0xA  ? 'A' - 10 : '0') + octet;                                                        
                                                                                                              
    out[2] = '\0';                                                                                            
} 
...

char buffer[3];
int c;

while ((c = fgetc(ptr)) != EOF) {
  char2hex(c, buffer);
  cout << buffer;
}
Gruß
 
Zurück