^I
e ^@
usam a notação comum "caret" para caracteres de controle . ^I
significa o caractere de controle ASCII-I, ou seja, o caractere 9, que é uma tabulação. ^@
significa o caractere ASCII control- @, ou seja, caractere 0, que em C é o caractere final da cadeia. A forma geral é ^c
, em que c
é uma letra maiúscula ou uma de @[\]^_
, representando o byte cujo valor é igual a c
menos 64; e ^?
representando o valor de byte 127 (que é o valor de byte de ?
mais 64).
Existe outra, muito menos notação padrão usada por cat -A
: bytes não-ASCII (isto é, valores de byte 128 e acima) são mostrados como M-
seguido pela representação do byte cujo valor é 128 por menos (isto é, o valor de byte com o bit superior invertido).
cat -A
não é a melhor maneira de entender a saída visualmente ambígua. Um transcrito hexadecimal fornece informações mais precisas, por exemplo,
od -t x1 /proc/cpuinfo
hd /proc/cpuinfo
Mas a partir de um programa em C, você pode usar apenas scanf
para analisar as informações. Todo espaço em branco ASCII é espaço em branco para scanf
e, com arquivos em /proc
, você sabe que o formato será válido.