有cat
,我用的-A
标志,我无法查找这些字符意味着任何地方。例如:
cat /proc/cpuinfo > output
cat -A output
其中一行是这样的:
processor^I: 7$
Run Code Online (Sandbox Code Playgroud)
我知道这$
意味着新行,但这是什么^I
意思?
什么^@
意思?
我试图弄清楚 cpuinfo 吐出的空白类型是什么,以便我可以在我的 C 程序中去除它们,但是我很难做到这一点。
Gil*_*il' 19
^I
并^@
使用常见的“插入符号”符号表示控制字符。^I
表示ASCII字符control-I,即字符9,它是一个制表符。^@
表示ASCII 字符control-@,即字符0,在C 中是字符串结束字符。一般形式为where为大写字母或其中之一,表示值为负 64的字节;并表示字节值 127(即加 64的字节值)。^c
c
@[\]^_
c
^?
?
还有另一个使用的标准符号要少得多cat -A
:非 ASCII 字节(即字节值 128 及以上)显示为,M-
其后是值小于 128 的字节的表示(即高位翻转的字节值)。
cat -A
不是理解视觉模糊输出的最佳方式。十六进制成绩单为您提供更精确的信息,例如
od -t x1 /proc/cpuinfo
hd /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
但是从 C 程序中,您可以仅用于scanf
解析信息。所有 ASCII 空格都是到 的空格scanf
,并且/proc
您知道文件中的格式是有效的。
在这种情况下,^
被用作“控制”的捷径。所以^A
表示“control-A”,即ASCII字符1。 ^I
表示control-I
或ASCII 9,也称为TAB. ^@
因此是 ASCII 00 或 NUL 字符。
这些字符通常被称为“控制字符”。
您可能还会看到M-
;这意味着“元”并意味着设置了最高位(将 128 添加到以下字符的 ASCII 值)。
作为附录,其他答案并没有完全明确字母和控制字符之间的关系
该ASCII字符集可以显示在像这样的表
NUL SP @ `
SOH ! A a
STX " B b
ETX # C c
EOT $ D d
ENQ % E e
ACK & F f
BEL ' G g
BS ( H h
HT ) I i
LF * J j
VT + K k
FF , L l
CR - M m
SO . N n
SI / O o
DL 0 P p
DC1 1 Q q
DC2 2 R r
DC3 3 S s
DC4 4 T t
NAK 5 U u
SYN 6 V v
ETB 7 W w
CAN 8 X x
EM 9 Y y
SUB : Z z
ESC ; [ {
FS < \ |
GS = ] }
RS > ^ ~
US ? _ DEL
Run Code Online (Sandbox Code Playgroud)
您可能知道可以通过按标有 的键盘键将名为 TAB 的控制字符插入到文档中TAB。您可能还知道,您可以通过按住CTRL键并按来实现相同的目的I。标记的控制键CTRL作为输入 ASCII控制字符的一种方式存在。
从上表可以看出,“I”字符与HT(Horizontal Tabulation,即TAB)字符在同一行。
现在我们可以把这个字符写成CTRL+,I但在过去更常见的是把它缩写为^I
从表中您还可以看到“@”与“NUL”在同一行,因此^@
代表 NUL,即空字符 0x00。
表中的排列说明分配给这些 ASCII 字符的数值(“代码点”)是这样的:每个字母都是 0x40 加上相应控制字符的值。
使用十六进制查看器:
% hexdump -C /proc/cpuinfo | sed -n /processor/p
00000000 70 72 6f 63 65 73 73 6f 72 09 3a 20 30 0a 76 65 |processor.: 0.ve|
00000340 74 3a 0a 0a 70 72 6f 63 65 73 73 6f 72 09 3a 20 |t:..processor.: |
%
Run Code Online (Sandbox Code Playgroud)
然后查阅ascii(7)
或类似的表格来查找特定的代码,在这里09
或水平选项卡。
归档时间: |
|
查看次数: |
10707 次 |
最近记录: |