使用hex,dec和oct值在C中写入转义序列?

时间:2013-10-04 05:17:47

标签: c types escaping sequence

有人可以向我解释这个问题吗?我不明白这本书是如何达到它的价值观或者如何得出答案的。

以下是问题:

  

假设chchar类型的变量。显示如何使用转义序列,十进制值,八进制字符常量和十六进制字符常量将回车符分配给ch。 (假设ASCII码值。)

以下是答案:

  

使用:

将回车符分配给ch      

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

我理解a部分的答案,但是b,c和d部分完全丢失了。你能解释一下吗?

3 个答案:

答案 0 :(得分:3)

来自wiki:

  

计算机和通信设备代表使用a的字符   将每个角色分配给某个东西的字符编码 - 一个   由一系列位表示的整数,通常是 - 那个   可以通过网络存储或传输。通常的两个例子   编码是ASCII和Unicode的UTF-8编码。

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

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

答案 1 :(得分:3)

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

  1. 您需要知道“回车”或CR(也称为 Control-M )的ASCII代码点是13.您可以从各种来源找到它。 Unicode标准是其中一个地方(但它是)并且U + 000D是CARRIAGE RETURN(CR)可能并不明显。 Unicode代码点U + 0000..U + 007F与ASCII相同; Unicode代码点U + 0000..U + 00FF与ISO 8859-1(Latin 1)相同。

  2. 在分配字符时,您需要知道C可以使用十进制数,或八进制或十六进制转义符。 '\15''\015'等符号是八进制字符常量,八进制15是十进制13.符号如'\xD''\x0D'(或者实际上是'\x0000000000000D'并且所有停止路由)是十六进制常量,十六进制D也是十进制13.(请注意,八进制转义限制为1-3位,但十六进制转义不限于此,但值大于{ {1}}通常具有实现定义的表示。)

答案 2 :(得分:3)

计算机使用字符encondings表示字符,例如ascii,utf-8,utf-16,iso-8859(http://en.wikipedia.org/wiki/ISO/IEC_8859-1)以及其他字符。早期计算机使用回车字符作为打印机指令将打印头返回到最左侧位置。并且使用换行符将纸张索引到一个新行(因此DOS使用CRLF作为行,它对点阵打印机效果更好)。无论如何,CR字符在内部存储为单个8位字节/八位字节的数值或两个字节/八位字节的16位对,具体取决于您的语言。

常见的ascii字符集在这里找到:http://www.asciitable.com/你可以发现CR,'\ r',13,0xD等是相同值的不同表示。

字符串只是字符序列存储为字符数组,末尾带有标记(终结符),或者存储当前字符串长度的计数。