在字符串流中保持零填充
Keeping zero padding in stringstream
我有一个内存区域,其中包含代表不同十六进制单词的字符。当我打印它们时,我想保留所有字符,但使用我当前的代码,非零数字中的零填充被剥离。例如,如果我在内存中有字符 0000
,它会输出 0000
,但如果我有 0001
,它会输出 1
。我目前正在使用 stringstream,但也尝试过使用字符数组来构造字符串(请参阅评论):
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
指向字符,我干脆把for循环拿出来用atoi(data_ptr)
尝试使用
std::cout << std::setfill('0') << std::setw(4) << data;
干杯!
我有一个内存区域,其中包含代表不同十六进制单词的字符。当我打印它们时,我想保留所有字符,但使用我当前的代码,非零数字中的零填充被剥离。例如,如果我在内存中有字符 0000
,它会输出 0000
,但如果我有 0001
,它会输出 1
。我目前正在使用 stringstream,但也尝试过使用字符数组来构造字符串(请参阅评论):
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
指向字符,我干脆把for循环拿出来用atoi(data_ptr)
尝试使用
std::cout << std::setfill('0') << std::setw(4) << data;
干杯!