Я смотрел вывод вызова strace
, когда я наткнулся на то, что раньше не видел. Пример вывод был следующим (с вызовом recv
, разработать):Печать экранированных символов напрямую и их связь с таблицей ASCII
recv(13, "%\0\0\0\23\0\1\0\5\0\0\0\0\0\0\0\0\0\0\0\26\0\0\0\0\0\0\0\0\0\0\0\5\0\20\0\5", 37, 0)
В то время как другие выглядят результаты:
recv(10, "OK\n", 3, 0)
Независимо от того, что фактическая RECV намеревалась передать, я заметил, что каждый из отправленных символов был экранирован. Я думал, что, возможно, эти экранированные персонажи были связаны с ASCII Table способом «один к одному» (то есть \10
, эквивалентным \n
).
Таким образом, быстрый тест, как:
printf("Before newline \10 After newline);
дает следующий результат:
Before newline After newline
Затем я попытался просто напечатать значение самого символа в десятичной форме:
printf("Value: %d", '\10');
Дает результат:
Value: 8
Поэтому, естественно, так как разница была два я пытался:
printf("Before newline \12 After newline);
Производит:
Before newline
After newline
Таким образом, оказывается, что экранированные символы этого формата сделать связаны к таблице ascii с отношением «менее 2».
Почему существует разница между двумя таблицами ascii и экранированным символом?
В чем смысл этого и почему он работает таким образом?
Это просто нюанс
strace
?
После немного больше испытаний я заметил, что не было «меньше 2» отношения между двумя как упомянутое выше. Ответы ниже объясняют это напрямую. – sherrellbc