为什么C程序员会使用转义序列(oct/hex)来表示ASCII值而不是十进制?
跟进:这与性能或可移植性有关吗?
例:
char c = '\075';
Run Code Online (Sandbox Code Playgroud)
您使用八进制或十六进制,因为无法在字符文字或字符串文字中指定十进制代码.Octal在PDP-11代码中很普遍.这些天,使用十六进制可能更有意义,但是'\0'比它更紧凑'\x0'(所以'\0'在null终止字符串时使用,等等).
另外,要注意"\x0ABad choice"不具备您可能期望的含义,而"\012007 wins"可能确实如此.(不同之处在于十六进制转义运行直到遇到非十六进制数字,而八进制转义在最多3位数后停止.要获得预期结果,您需要"\x0A" "Bad choice"使用'相邻字符串文字串联'.)
这与性能无关,与可移植性无关.编写'\x41'或'\101'代替'A'是一种降低代码的可移植性和可读性的方法.当没有更好的方法来表示字符时,您应该只考虑使用转义序列.