使用八进制ASCII的目的

时间:2015-01-08 06:44:16

标签: c octal

为什么C程序员会使用转义序列(oct / hex)来表示ASCII值而不是小数?

跟进:这与性能或可移植性有关吗?

示例:

char c = '\075';

5 个答案:

答案 0 :(得分:5)

您使用八进制或十六进制,因为无法在字符文字或字符串文字中指定十进制代码。 Octal在PDP-11代码中很普遍。现在,使用十六进制可能更有意义,但'\0''\x0'更紧凑(因此当您终止字符串时使用'\0'等等。)。

另外,请注意"\x0ABad choice"没有您可能期望的含义,而"\012007 wins"可能会这样。 (不同之处在于十六进制转义运行直到遇到非十六进制数字,而八进制转义在最多3位数后停止。要获得预期结果,您需要"\x0A" "Bad choice"使用'相邻字符串文字级联”。)

这与性能无关,与可移植性无关。写'\x41''\101'而不是'A'是降低代码的可移植性和可读性的一种方法。当没有更好的方法来表示角色时,您应该只考虑使用转义序列。

答案 1 :(得分:2)

不,它与性能和可移植性无关。这只是一种方便的方法来定义字符文字,并在字符串文字中专门用于不可打印的字符。

答案 2 :(得分:1)

它与性能和可移植性无关。事实上,您根本不需要任何代码,而不是:

char c = 65;

您可以简单地写一下:

char c = 'A';

但有些字符并不容易打字,例如ASCII SOH,所以你可以写:

char c = 1; // SOH

或任何其他形式,十六进制,八进制,取决于您的偏好。

答案 3 :(得分:0)

它与性能和可移植性无关。简单地说,ASCII字符集(以及它的衍生产品直到UTF)以字节和位组织。例如,32个第一个字符是控制字符,32 = 040 = 0x20,ASCII代码'A'是65 = 0101 = 0x41,'a'是97 = 0141 = 0x61,ASCII代码'0'是48 = 060 = 0x30。

我不知道你,但对我来说'0x30'和0x'41'比手动操作更容易记忆和使用,而不是48和65.

顺便说一下,一个字节恰好代表0到255之间的所有值,即0和0xFF ......

答案 4 :(得分:0)

我不知道这有效。

但我立即得到了一个非常有用的想法。

想象一下,你的内存环境很低,必须使用像unix文件夹权限这样的权限系统。

假设有3组,每组有2个不同的选项,可以被允许或拒绝。

0表示两个选项都不是,

1表示允许第一个选项,

2表示允许第二个选项,

3表示允许。

要存储权限,您可以这样做:

char* bar = "213"; // first group has allowed second option, second group has first option allowed and third has full acces.

但是你有四个字节的存储空间来存储这些信息。

Ofc你可以把它转换成十进制表示法。但那可读性较差。

但现在我知道了......

做的:

char bar = '\0213';

非常易读并且还可以节省内存! 我喜欢它:D