文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于字符串赋值中的16进制转换

关于字符串赋值中的16进制转换

时间:2010-10-07  来源:wb127

今天写code,遇到很有意思的关于字符串赋值的一个问题。 由于需要比对节目名,于是初始化一个字符串数组,其中有个节目的名字是Barça TV,但是ç无法在ultraedit中显示,于是使用16进制的UTF8码做初始化如下: string[] = {“”…”Bar\xc3\xa7a TV"}; 结果编译出错:hex escape sequence out of range g了下,说到 #include <stdio.h>
int main()
{
char buffer[] = "\x53est\x03t";
int i;
for(i=0;i <6;i++)
{printf("%c\n",buffer[i]);}
}
这样会有警告 [Warning] C:\Program Files\C-Free 4\temp\未命名1.c:4: warning: escape sequence out of range for character
但是输出还是
>
而为什么"\x53est\x03t"这个字符串会报:
Compiling...
test.cpp
E:\test\test.cpp(4) : error C2022: '1342' : too big for character
Error executing cl.exe.
test.exe - 1 error(s), 0 warning(s)
这样一个错误,也就是说这个时候编译器将\x53e进行了转义,根据这个道理,依次类推:
如果字符串是"\x53efst\x03t",编译器将\x53ef进行转义。
进一步可以推理:
如果是char b='\x53ef'也会出现上述类似的编译错误。
由此可以看出,VC的编译器对\xhh的转义其实不是说\x后面只有两位数进行转义,而是说\x后面紧挨着只要是"0123456789abcef"这些字符都要进行转义,也就是属于十六进制范围内的字符。
其他编译器未进行测试,可以测试gcc/g++的编译情况。
可见是由于\xa7a超出了16进制的表示范围,那么如何解决呢, string[] = {“”…"Bar\xc3\xa7""a TV"}; 这样编译通过,看来C中和python对字符串处理在这里有一样的方式,对于接连的双引号都自动地将字符串连接,这在以往的编程经历中从来没有注意到这个问题。
相关阅读 更多 +
排行榜 更多 +
野生恐龙射击生存安卓版

野生恐龙射击生存安卓版

飞行射击 下载
战场狙击手

战场狙击手

飞行射击 下载
1v1布娃娃射击安卓版

1v1布娃娃射击安卓版

飞行射击 下载