使用十六进制、十进制和oct值在C中写入转义序列?

使用十六进制、十进制和oct值在C中写入转义序列?,c,types,escaping,sequence,C,Types,Escaping,Sequence,有人能给我解释一下这个问题吗?我不明白这本书是如何得出它的价值观的,也不明白人们是如何得出答案的 问题是: 假设ch是一个类型char变量。演示如何使用转义序列、十进制值、八进制字符常量和十六进制字符常量将回车符指定给ch。(假设ASCII代码值。) 答案如下: 使用以下命令将回车符指定给ch: a) 转义序列:ch='\r' b) 十进制值:ch=13 c) 八进制字符常量:ch='\015' d) 十六进制字符常量:ch='\xd' 我理解a部分的答案,但对于b、c和d部分我完全不知所措。你

有人能给我解释一下这个问题吗?我不明白这本书是如何得出它的价值观的,也不明白人们是如何得出答案的

问题是:

假设
ch
是一个类型
char
变量。演示如何使用转义序列、十进制值、八进制字符常量和十六进制字符常量将回车符指定给
ch
。(假设ASCII代码值。)

答案如下:

使用以下命令将回车符指定给
ch

a) 转义序列:
ch='\r'
b) 十进制值:
ch=13
c) 八进制字符常量:
ch='\015'
d) 十六进制字符常量:
ch='\xd'

我理解a部分的答案,但对于b、c和d部分我完全不知所措。你能解释一下吗?

来自维基:

计算机和通信设备使用一个符号来表示字符 将每个字符分配给某个对象的字符编码 由位序列表示的整数量,通常为 可以通过网络存储或传输。两个常见的例子 编码为ASCII和Unicode的UTF-8编码

对于问题b、c、d,所有值都是13(十进制)。运行以下代码以了解发生了什么:

char ch1='\r';
printf("Ascii value of carriage return is %d", ch1);

有两个部分来解释答案b-d

  • 您需要知道“回车”或CR(也称为Control-M)的ASCII码点是13。你可以从各种渠道找到答案。可能不太清楚标准是否是这些地方之一(但确实是),U+000D是回车(CR)。Unicode代码点U+0000..U+007F与ASCII相同;Unicode代码点U+0000..U+00FF与ISO 8859-1(拉丁语1)相同

  • 您需要知道,C可以使用十进制数,或者在分配给字符时使用八进制或十六进制转义。诸如
    '\15'
    '\015'
    等符号是八进制字符常量,而八进制15是十进制13。诸如
    '\xD'
    '\x0D'
    (或者实际上,
    '\x0000000d'
    和途中的所有站点)等符号都是十六进制小数常量,十六进制D也是十进制13。(请注意,八进制转义限制为1-3位,但十六进制转义不受此限制,但大于
    '\xFF'
    的值通常具有实现定义的表示形式。)


  • 计算机使用字符编码来表示字符,例如ascii、utf-8、utf-16、iso-8859(),以及其他字符。早期的计算机使用回车符作为打印机指令,将打印头返回到最左边的位置。而且换行字符用于将纸张索引到新行(因此,DOS使用CRLF进行换行的原因是,它在点阵打印机中工作得更好)。无论如何,CR字符在内部作为数值存储在单个8位字节/八位字节或两个字节/八位字节的16位对中,具体取决于您的语言

    在这里可以找到常见的ascii字符集:您可以发现CR、'\r',13、0xD等是相同值的不同表示形式


    字符串只是一系列字符,可以存储为结尾带有标记(终止符)的字符数组,也可以存储为当前字符串长度的计数。

    ohhh!现在说得通了!我想我必须找到“r”的ascii码,这样我才能找到“\\\”的数字部分。现在我看到“\r”是一个整数,斜杠包含在其中,用它自己单独的ascii码组成一个字符!非常感谢你的帮助!我曾经迷路过。。。现在我发现:)也谢谢你的帮助!:D