Мне трудно использовать reinterpret_cast.Сразу скажем, что я не женат или reinterpret_cast.Не стесняйтесь предлагать серьезные изменения.Прежде чем я покажу вам свой код, я дам вам знать, что я пытаюсь сделать.
Я пытаюсь получить имя файла из вектора, полного данных, используемых процессором MIPS I, который я разработал.По сути, я делаю скомпилировать двоичный файл из тестовой программы для моего процессора, выгрузить все шестнадцатеричные числа из двоичного файла в вектор в моей программе на c ++, преобразовать все эти шестнадцатеричные числа в десятичные целые и сохранить их в векторе DataMemory, который является данными.блок памяти для моего процессора.У меня также есть память инструкций.Поэтому, когда мой процессор выполняет инструкцию SYSCALL, такую как «Открыть файл», мой эмулятор операционной системы C ++ получает указатель на начало имени файла в моей памяти данных.Так что имейте в виду, что память данных полна целочисленных, строковых, глобальных, локальных и всяких других вещей.Когда мне сообщают, где начинается имя файла, я делаю следующее:
Преобразование целого десятичного целочисленного элемента, на который указывает его символьное представление ASCII, и затем поиск слева направо, чтобы увидеть, заканчивается ли строка, если нет, то просто последовательно загрузите каждый символ в строку «filename».Делайте это до завершения строки в памяти, а затем сохраните имя файла в таблице.Моя сложность заключается в создании имени файла из моей памяти.
Вот пример того, что я пытаюсь сделать:
Синтаксис C ++ (переключить обычный текст)
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'
Вот код, который я написал до сих пор, чтобы получить имя файла (я просто применяю это к элементу 1000 моего вектора DataMemory для проверки функциональности. 1000 произвольно.): Синтаксис C ++ (Переключить обычный текст)
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;
Так что проблема в том, что когда я делаю преобразование моего десятичного элемента в массив символов, я предполагаю, что 8 шестнадцатеричных # дадут мне 4 символа.Почему это не так?Вот мой вывод:
Синтаксис C ++ (Переключить обычный текст)
1.a0:0
2.Data:0
3.Data(1000):4428576
4.Characters:0x7fff5fbff128
5.Segmentation fault