inpfile>>ch;
if(ch<16) outfile<<"0×0"<<std::hex<<setprecision(2)<<(int)ch<<" ";
какой std::hex<<setprecision(2)
средний?Как понять следующий код C++?
inpfile>>ch;
if(ch<16) outfile<<"0×0"<<std::hex<<setprecision(2)<<(int)ch<<" ";
какой std::hex<<setprecision(2)
средний?Как понять следующий код C++?
iostream
s можно манипулировать для достижения желаемого форматирования - это делается по тому, что на первый взгляд выглядит как вывод предопределенные значения для них, как показано в нашей предметной строке кода.
std::hex
отображает следующие целочисленные значения в базе16.
setprecision
устанавливает точность отображения следующих значений.
Fur далее информация о манипуляторах, начните here
std::hex
устанавливает выходное основание в шестнадцатеричное.
setprecision
не влияет на эту строку, поскольку это влияет только на плавающие точки.
что это
std::hex<<setprecision(2)
значит?
std::hex
и std::setprecision
оба так называемые манипуляторы. Применительно к потоку (выполняется путем их вывода) они управляют потоком, как правило, для изменения форматирования потока. В частности, std::hex
управляет потоком, так что значения записываются в шестнадцатеричном виде, а std::setprecision(x)
обрабатывает его для вывода чисел с цифрами x
.
(Довольно популярный манипулятор, который вы уже знаете о том, std::endl
.)
Как вы можете видеть, есть манипуляторы, которые принимают аргументы и те, которые не берут ничего. Кроме того, большинство (в принципе все) манипуляторов являются липкими, что означает, что их манипуляция потоком продолжается до тех пор, пока он не будет явно изменен. Here - обширная дискуссия по этой теме.
+1 для информации о липкости –
Эта линия так же, как:
char ch;
inpfile>>ch;
if(ch<16)
{
outfile << "0×0" // Prints "0x0" (Ox is the standard prefix for hex numbers)
/*outfile*/ << std::hex // Tells the stream to print the next number in hex format
/*outfile*/ << setprecision(2) // Does nothing. Presumably they were trying to indicate print min of 2 characters
/*outfile*/ << (int)ch // Covert you char to an integer (so the stream will print it in hex
/*outfile*/ << " "; // Add a space for good measure.
}
Вместо setprecision (2), что, вероятно, предназначен был setw (2) < < setfill ('0')
Google является вашим другом: HTTP : //www.cplusplus.com/reference/iostream/manipulators/hex/ http://www.cplusplus.com/reference/iostream/manipulators/setprecision/ – meagar
@meagar: IIUC, целью SO является то, что Google указывает, когда кто-то задает вопрос, связанный с программированием. Для этого нужно сначала задать эти вопросы и ответить здесь. – sbi
@sbi Должно быть какое-то отрезание, когда вопросы становятся слишком близкими к «вы сделаете мое мышление для меня?», И, на мой взгляд, этот вопрос обходит эту линию. SO должно быть местом, где Google указывает на * стоящие вопросы *, а не на простые вопросы, которые наилучшим образом отвечают на документацию. В противном случае мы могли бы просто отразить документацию и сделать это. – meagar