На этот вопрос сложно ответить, потому что трудно определить, какая у вас ментальная модель ситуации.
Мне нужно значение int второго символа в строке;НЕ значение ASCII, только то, что там хранится.
Доступ к значению, хранящемуся во втором символе в строке, осуществляется через str[1]
или *(str + 1)
или, возможно, *++str
.Результатом является значение, хранящееся в строке.В вашей примерной строке значение равно 3;этот символ также известен как CONTROL-C .Это отличается от значения, которое будет храниться там для цифры «3»;обычно он хранится как 51 (при условии, что кодовая страница основана на стандарте ISO 8859-1 или одном из его близких родственников, который использует такое же распределение символов, что и ASCII).
strLen = 0;
, а затем strLen = strLen | *(str + 1);
достичь того же результата, что и:
strLen = str[1];
strLen = *(str + 1);
В обоих случаях strLen
теперь содержит значение 3.
Затем оператор печати преобразует целочисленное значение 3 в строку, содержащую:
strLen => 3
, за которыми следуют CR и LF.(CR не требуется, даже на компьютере с Windows. Однако это отклоняет от рассматриваемой проблемы.)
Эти символы затем отправляются на стандартный вывод.Обратите внимание, что значение в позиции 10 на выходе (считая от нуля) совпадает с '3'
, обычно 51, и отличается от значения 3
, хранящегося в строке.Ваш формат запросил это преобразование.Если вы хотите напечатать символ, вы говорите так:
printf("strLen => %c\n", strLen);
Это выведет CONTROL-C на выход;как это будет выглядеть, зависит от вашего драйвера терминала и настроек терминала.