首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是与十六进制文字(0x41)完全等价的字符文字('A')。

是与十六进制文字(0x41)完全等价的字符文字('A')。
EN

Stack Overflow用户
提问于 2013-07-29 22:29:44
回答 2查看 349关注 0票数 1

在什么情况下,将'A'改为0x41可以改变我的程序的行为?把0x41改为'A'怎么样?是否有任何不寻常的体系结构或晦涩的编译器设置或奇怪的宏可能使这些宏不完全等效?如果它们在符合标准的编译器中完全等价,那么是否有人遇到过错误或非标准编译器,而它们并不相同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-29 22:31:30

在什么情况下,将“A”改为“0x41”可以改变我程序的行为?

是的,在EBCDIC字符集中,'A'值不是0x41,而是0xC1

C不需要ASCII字符集。

(C99,5.2.1p1)“执行字符集成员的值是实现定义的。

票数 6
EN

Stack Overflow用户

发布于 2013-07-29 22:33:18

字符文本'A'和整数文本0x41都具有int类型。因此,唯一不完全相同的情况是,基本执行字符集不是基于ASCII的,在这种情况下,'A'可能具有其他一些值。唯一可能遇到的非ASCII基本执行字符集是EBCDIC,其中'A' == 0xC1

C标准确实保证,无论它们的实际值是什么,通过'9'的字符文本'9'都将是连续的,并且是以递增的数字顺序进行的,也就是说,如果i是包含在0到9之间的整数,那么'0' + i将是该整数的十进制表示的字符。'A'通过'Z''a'通过'z'需要按字母顺序递增,但不能是连续的,而且它们在EBCDIC中并不是连续的。(该标准是专门为ASCII和EBCDIC制定的。)您可以使用'A' + i (或'a' + i)对十六进制数字A到F进行编码,因为它们在ASCII和EBCDIC中都是连续的,但从技术上讲,这是一种可以逃避的东西,而不是有保证的东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17935313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档