概述

      \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. django 之 stark组件

    ----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...

  2. VS2010创建MVC4项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral,

    在安装VS2010时没有安装MVC4,于是后面自己下载安装了(居然还要安装VS2010 SP1补丁包).装完后新建MVC项目时却提示: 错误: 此模板尝试加载组件程序集 “NuGet.VisualSt ...

  3. vue-百度地图-maker文字标签显示隐藏

    html: <div id="allmap" class="map"></div>   script:   mounted() { th ...

  4. 关于ESB(企业服务总线)的学习笔记

    MQ(消息队列 message queues),它是一种应用程序对应用程序的通信方法.排队指的是应用程序通过队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求. Web Sevice 技术, ...

  5. [bilibili]弹幕屏蔽列表

    <filters> <item enabled="true">t=定单身</item> <item enabled="true& ...

  6. BZOJ4259残缺的字符串

    题目描述 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度为m,B串长度为n.可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺. ...

  7. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位dp)

    题目链接:https://ac.nowcoder.com/acm/contest/163/J 题目大意:给定一个数N,求区间[1,N]中满足可以整除它各个数位之和的数的个数.(1 ≤ N ≤ 1012 ...

  8. [SHOI2008]仙人掌图 II——树形dp与环形处理

    题意: 给定一个仙人掌,边权为1 距离定义为两个点之间的最短路径 直径定义为距离最远的两个点的距离 求仙人掌直径 题解: 类比树形dp求直径. f[i]表示i向下最多多长 处理链的话,直接dp即可. ...

  9. vue---组件间通信

    vue中比较重要的就是组件了.而组件随处可复用的特性,使得组件通信非常重要.那么组件之间通讯方式有哪些呢? 第一种:父子组件通讯: 如果是 html页面 中全局注册的组件 和 实例中局部注册的组件 H ...

  10. C# 数独算法——LINQ+委托

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sing ...