У меня есть область памяти, содержащая символы, которые представляют разные шестнадцатеричные слова. Когда я их печатаю, я хотел бы сохранить все символы, но с моим текущим кодом нулевое заполнение ненулевыми числами удаляется. Например, если у меня есть в памяти персонажи 0000
это выводит 0000
но если у меня есть 0001
это выводит 1
, В настоящее время я использую поток строк, но также пытался использовать массив символов для создания строки (см. Комментарии):
stringstream ss;
char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
for (int d = 0; d < 2 * bytes_word; d++){
ss << *(data_ptr + d);
}
data = ss.str();
//char* data_ch = new char[2 * bytes_word];
//char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
//for (int d = 0; d < 2 * bytes_word; d++){
// data_ch[d] = *(data_ptr + d);
//}
//string data(data_ch);
//delete[] data_ch;
Исходя из этого, я склоняюсь к тому, что на самом деле удаление может быть сделано, когда я передаю строку в стандартный вывод, я использую cout << data;
, поскольку мой режим отладки показывает содержимое строки в обоих случаях, чтобы содержать все 0. Если это так, как я мог решить это?
РЕДАКТИРОВАТЬ — Решено
Как написано в принятом ответе пришлось использовать setfill()
а также setw()
о котором я не знал. Это не решило проблему сначала, потому что data_ptr
указывает на символы, я просто вынул цикл и использовал atoi(data_ptr)
Попробуйте использовать
std::cout << std::setfill('0') << std::setw(4) << data;
Ура!
Других решений пока нет …