概述

      \x转义的定义是这样的

转义符 字符值 输出结果
\xh[h...] 具有此十六进制码的字符 输出此字符

问题

     看似\x后面可以接受1或n个十六进制的字符,但是如果你把一个超过ff分十六进制数赋值给一个char变量,会得到一个"Out of range"的提示;

#include <stdio.h>
#include <wchar.h> int main(void)
{
char a = '\x123';
printf("%d\n", a);
}
c28.c: In function ¡®main¡¯:
c28.c::: warning: hex escape sequence out of range [enabled by default]
char a = '\x123';

分析

这是因为char类型只能容纳1byte的数,面对十六进制123是无能为力的,但是,即使是把char类型换成wchar_t类型,貌似也会有问题;

#include <stdio.h>
#include <wchar.h> int main(void)
{
wchar_t a = '\x123';
printf("%d\n", a);
}
c28.c: In function ¡®main¡¯:
c28.c::: warning: hex escape sequence out of range [enabled by default]
wchar_t a = '\x123';

但如果用L预处理符号以表明一下这个/段字符是宽字符,就不会出现问题。这是因为声明字符变量时如果不表明该字面量是宽字符,编译器默认会当成窄字符去处理,而一个窄字符的大小只有1byte

#include <stdio.h>
#include <wchar.h> int main(void)
{
wchar_t a = L'\x123';
printf("%d\n", a);
}

当然,宽字符(也就是wchar_t类型)也有大小限制,这通常视系统而定,一般系统一个宽字符的大小是4byte。如果你输入的十六进制值大于4byte,那么编译器也会报"Out of range";

另外,\x跟字符位数无关,也就是说\x61、\x061和\x000000061三者是一个意思

#include <stdio.h>
#include <wchar.h> int main(void)
{
char a = '\x0000000061';
printf("%d\n", a);
}

总结    

\x确实可以接受1或n个十六进制数,只是要看赋值变量类型是否匹配

题外话

其他语言跟C会有一点差异,例如在javascript和PHP,\x只会接受前两位十六进制数,后面(要是有)则当普通字符处理。

[C]\x字符转义序列的更多相关文章

  1. c语言-三字符组

    C 源程序源字符集在 7 位 ASCII 字符集中包含,但设置为 ISO 646-1983 固定的代码的超集. 三字符序列允许 C 程序编写使用 " 仅 ISO (国际标准组织的固定的代码. ...

  2. XML中的转义字符

    HTML中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & 或 & &a ...

  3. ISAPI_Rewrite中文手册

    参考:http://blog.csdn.net/fanxiaojie119/article/details/5353186 第一章:软件介绍ISAPI_Rewrite 是一款适用于IIS的功能强大的基 ...

  4. 【xml】转义字符 &lt;等符号出现的原因

    来源:http://www.cnblogs.com/hyd309/p/3549076.html HTML中的转义字符  HTML中<, >,&等有特别含义,(前两个字符用于链接签, ...

  5. 正则表达式 (C++)

    本主题讨论各正则表达式引擎的语法. 正则表达式语法 语法摘要 语义详细信息 匹配和搜索 格式标志 正则表达式语法   元素  元素可以是下列项之一: 一般字符,可匹配目标序列中的相同字符. 通配符“. ...

  6. HTML,XML中的转义字符

    HTML中的转义字符 HTML中<, >,&等有特别含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用他们的转义序列,如下所示: & ...

  7. JavaScript 札记(数据类型和变量、)

    1. 变量名由:字母.下划线.$.数字组成,只可以字母.下划线.$开头. 2.JavaScript区分大小写! 3.命名规范:匈牙利命名法(不论是变量名还是函数名). 4.基本类型(3种):字符串.数 ...

  8. 【转】Linux Framebuffer

    全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...

  9. HTML & XML 转义字符

    HTML & XML 转义字符 HTML中<, >,&等有特殊含义,(前两个字符用于链接签,&用于转义),不能直接使用.使用这三个字符时,应使用它们的转义序列,如下 ...

随机推荐

  1. 微服务领域是不是要变天了?Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器!

    引言 微服务这个词的热度自它出现以后,就一直是高烧不退,而微服务之所以这么火,其实和近几年互联网的创业氛围是分不开的. 与传统行业不同,互联网企业有一个特点,那就是市场扩张速度非常之快,可能也就是几天 ...

  2. 全局css控制<td>标签属性

    td { text-align: center; /*设置水平居中*/ vertical-align: middle; /*设置垂直居中*/    height:50px;             / ...

  3. CRM专业术语

    客户关系管理(管理学词汇CRM)_百度百科https://baike.baidu.com/item/%E5%AE%A2%E6%88%B7%E5%85%B3%E7%B3%BB%E7%AE%A1%E7%9 ...

  4. [转帖]Sqlcmd使用详解

    Sqlcmd使用详解 2018年09月17日 13:36:39 吥輕誩放棄 阅读数:3053   版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  5. java的List列表转成Tree(树形)结构列表

    直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...

  6. Tomcat连接 ideal

    一.为了建立Servlet,我们需要先将Tomact连接到ideal! <%-- Created by IntelliJ IDEA. User: Administrator Date: 2019 ...

  7. java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Mon Oct 01 16:32:37 CS

    使用idea工具更改项目包名时报 :java.lang.ClassNotFoundException 解决方案: 1.删除项目的target目录,这个目录存放的是编译后的文件 2.清除缓存 3.重新编 ...

  8. Oracle篇 之 查询行及概念

    Oracle: s_emp   s_dept  s_region 行:Row(tuple) 列:Column(attribute) conn:改变用户 Drop:删除用户  drop user bri ...

  9. 修改chrome的安装目录

    进入默认安装目录,然后把application文件夹复制出来,把文件夹改名为“Chrome浏览器”之类的.然后进入这个文件夹,新建一个文件夹,名字叫做est_profile 在chrome.exe目录 ...

  10. Element UI——本地引入iconfont不显示

    前言 前面因为本地引入Element UI导致了iconfont不显示,所以只好再去Element UI官网去扒下iconfot 步骤 进入官网 组件 | Element UI F12进入控制台,找到 ...