我想分配一个char字符,但它是一个特殊的字符,如255或13.
我知道我可以分配我的字符与文字int将被转换为char:char a = 13;
我也知道微软会让我使用hex code as a char literal:char a = '\xd'
特殊字符文字
我想知道是否有办法做到这一点,gcc也支持。
我想分配一个char字符,但它是一个特殊的字符,如255或13.
我知道我可以分配我的字符与文字int将被转换为char:char a = 13;
我也知道微软会让我使用hex code as a char literal:char a = '\xd'
特殊字符文字
我想知道是否有办法做到这一点,gcc也支持。
的十六进制转义序列是特定于Microsoft 不。它的C/C++部分:http://en.cppreference.com/w/cpp/language/escape
这意味着一个十六进制数分配给char
,这是跨平台代码:
char a = '\xD';
问题已经演示了一个char
分配十进制数:
char a = 13;
和八进制数也可以被指定为良好,只有逃生开关:
char a = '\023';
顺便提一句,'\0'
在C/C++中很常见,以表示空字符(与平台无关)。 '\0'
不是可以逃脱的特殊字符。这实际上是调用八进制转义序列。
“它是C/C++的一部分” - 更确切地说,它是C的一部分,它是C++的一部分。但问题只是标记了C,所以我不确定C++是否相关。 –
@Keith Thompson第二,由于语言在类型上也有差异:在C'sizeof('\ xD')== sizeof(int)'中,而在C++中'sizeof('\ xD')== sizeof(char) – chux
@chux哦,我不知道。这是否意味着所有的字面'char'都被解释为C中的int?所以它总是必须转换回'char'来分配? –
写东西像
char ch = 13;
是大多便携,在其上价值13
是同样的事情,你的平台(上平台它是使用ASCII字符集,这的确是所有系统大多数系统)。
有可能是在其13
可能意味着别的平台。但是,无论使用字符编码系统,使用'\r'
都应该始终是便携式的。
使用其他值,不具有字符文字等值,是而不是便携式。并使用127以上的值甚至少便携,从此以后你就是ASCII表外,并进入扩展ASCII表,其中字母可以取决于系统的区域设置。例如,西欧和东欧语言设置很可能在128
至255
范围内具有不同的字符。
如果你想使用字节它可以包含而不使用char
你可能会想要使用例如只是一些二进制数据,而不是字母, uint8_t
,告诉其他读者你的代码,你没有使用变量的字母,但二进制数据。
是什么让你觉得这些方法不是跨平台的? – BlueMonkMN
你关心哪个平台?你是在谈论不同的编译器,或不同的操作系统,或不同的字符集? –
ascii中代码为“13”的字符正确写为“\ r'',它是完全可移植的。 – rici