J'ai de la difficulté à utiliser reinterpret_cast. Disons tout de suite que je ne suis pas marié ot reinterpret_cast. N'hésitez pas à suggérer des changements majeurs. Avant de vous montrer mon code, je vous dirai ce que j'essaie de faire. J'essaie d'obtenir un nom de fichier à partir d'un vecteur plein de données utilisées par un processeur MIPS que j'ai conçu. Fondamentalement, ce que je fais est de compiler un binaire d'un programme de test pour mon processeur, vider tous les hexs du binaire dans un vecteur dans mon programme C++, convertir tous ces hexs en entiers décimaux et les stocker dans un vecteur DataMemory qui est les données unité de mémoire pour mon processeur. J'ai aussi une mémoire d'instruction. Donc, lorsque mon processeur exécute une instruction SYSCALL telle que "Open File" mon émulateur de système d'exploitation C++ reçoit un pointeur au début du nom de fichier dans ma mémoire de données. Gardez donc à l'esprit que la mémoire de données est pleine d'ints, de chaînes, de globals, de locaux, de toutes sortes de choses. Quand on me dit où le nom de fichier commence, je fais ce qui suit:Convertir décimal en ASCII
Convertir tout l'élément entier décimal pointé en sa représentation de caractères ASCII, puis rechercher de gauche à droite pour voir si la chaîne se termine, si pas alors simplement charger chaque caractère consécutivement dans une chaîne "filename". Pour ce faire jusqu'à la fin de la chaîne en mémoire, puis stocker le nom de fichier dans une table. Ma difficulté est la génération de nom de fichier de ma mémoire.
Voici un exemple de ce que je suis en train de faire:
C++ Syntaxe (Toggle Texte brut)
1.Index Vector NewVector ASCII filename
2.0 240faef0 128123792 'abc7' 'a'
3.0 240faef0 128123792 'abc7' 'ab'
4.0 240faef0 128123792 'abc7' 'abc'
5.0 240faef0 128123792 'abc7' 'abc7'
6.1 1234567a 243225 'k2s0' 'abc7k'
7.1 1234567a 243225 'k2s0' 'abc7k2'
8.1 1234567a 243225 'k2s0' 'abc7k2s'
9. //EXIT LOOP//
10.1 1234567a 243225 'k2s0' 'abc7k2s'
Voici le code que j'ai écrit jusqu'à présent pour obtenir le nom de fichier (Je suis juste Appliqué à l'élément 1000 de mon vecteur DataMemory pour tester la fonctionnalité 1000 est arbitraire):.. C++ Syntaxe (Toggle texte brut)
1.int i = 0;
2.int step = 1000;//top->a0;
3.string filename;
4.char *temp = reinterpret_cast<char*>(DataMemory[1000]);//convert to char
5.cout << "a0:" << top->a0 << endl;//pointer supplied
6.cout << "Data:" << DataMemory[top->a0] << endl;//my vector at pointed to location
7.cout << "Data(1000):" << DataMemory[1000] << endl;//the element I'm testing
8.cout << "Characters:" << &temp << endl;//my temporary char array
9.
10.while(&temp[i]!=0)
11.{
12. filename+=temp[i];//add most recent non-terminated character to string
13. i++;
14. if(i==4)//when 4 characters have been added..
15. {
16. i=0;
17. step+=1;//restart loop at the next element in DataMemory
18. temp = reinterpret_cast<char*>(DataMemory[step]);
19. }
20. }
21. cout << "Filename:" << filename << endl;
donc, la question est que quand je fais la conversion de mon élément décimal en un tableau char je suppose que 8 # hexs me donneront 4 caractères. Pourquoi n'est-ce pas ce cas? Voici ma sortie:
C++ Syntaxe (Toggle Texte brut)
1.a0:0
2.Data:0
3.Data(1000):4428576
4.Characters:0x7fff5fbff128
5.Segmentation fault
Ok, donc j'ai sortof ce compris sur . Je suis allé le long chemin et juste retourné à mon tableau hexadécimal, a pris chaque mot, le diviser en mots hexadécimaux 2bit et ensuite fait la conversion en ascii sur chaque segment de 2 bits puis j'ai ajouté le résultat à ma chaîne de nom de fichier, itérer jusqu'à ce que je reçoive un "0" et pause.Fonctionne bien mais d'une manière difficile à manier. ** conversion = hexCharValue (tempInstructionMemory [1000] [i * 2]) << (4 * 1); conversion + = hexCharValue (tempInstructionMemory [1000] [(i * 2) +1]) << (4 * 0); si (conversion == 0) casse; filename + = (char) de conversion; ** –