2010-09-20 5 views
-1
inpfile>>ch; 

if(ch<16) outfile<<"0×0"<<std::hex<<setprecision(2)<<(int)ch<<" "; 

какой std::hex<<setprecision(2) средний?Как понять следующий код C++?

+3

Google является вашим другом: HTTP : //www.cplusplus.com/reference/iostream/manipulators/hex/ http://www.cplusplus.com/reference/iostream/manipulators/setprecision/ – meagar

+0

@meagar: IIUC, целью SO является то, что Google указывает, когда кто-то задает вопрос, связанный с программированием. Для этого нужно сначала задать эти вопросы и ответить здесь. – sbi

+1

@sbi Должно быть какое-то отрезание, когда вопросы становятся слишком близкими к «вы сделаете мое мышление для меня?», И, на мой взгляд, этот вопрос обходит эту линию. SO должно быть местом, где Google указывает на * стоящие вопросы *, а не на простые вопросы, которые наилучшим образом отвечают на документацию. В противном случае мы могли бы просто отразить документацию и сделать это. – meagar

ответ

2

iostream s можно манипулировать для достижения желаемого форматирования - это делается по тому, что на первый взгляд выглядит как вывод предопределенные значения для них, как показано в нашей предметной строке кода.

std::hex отображает следующие целочисленные значения в базе16.

setprecision устанавливает точность отображения следующих значений.

Fur далее информация о манипуляторах, начните here

0

std::hex устанавливает выходное основание в шестнадцатеричное.

setprecision не влияет на эту строку, поскольку это влияет только на плавающие точки.

1

что это std::hex<<setprecision(2) значит?

std::hex и std::setprecision оба так называемые манипуляторы. Применительно к потоку (выполняется путем их вывода) они управляют потоком, как правило, для изменения форматирования потока. В частности, std::hex управляет потоком, так что значения записываются в шестнадцатеричном виде, а std::setprecision(x) обрабатывает его для вывода чисел с цифрами x.
(Довольно популярный манипулятор, который вы уже знаете о том, std::endl.)

Как вы можете видеть, есть манипуляторы, которые принимают аргументы и те, которые не берут ничего. Кроме того, большинство (в принципе все) манипуляторов являются липкими, что означает, что их манипуляция потоком продолжается до тех пор, пока он не будет явно изменен. Here - обширная дискуссия по этой теме.

+0

+1 для информации о липкости –

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')

Смежные вопросы