2013-10-23 104 views
0

我想分配一个char字符,但它是一个特殊的字符,如255或13.
我知道我可以分配我的字符与文字int将被转换为char:char a = 13;
我也知道微软会让我使用hex code as a char literalchar a = '\xd'特殊字符文字

我想知道是否有办法做到这一点,gcc也支持。

+5

是什么让你觉得这些方法不是跨平台的? – BlueMonkMN

+1

你关心哪个平台?你是在谈论不同的编译器,或不同的操作系统,或不同的字符集? –

+0

ascii中代码为“13”的字符正确写为“\ r'',它是完全可移植的。 – rici

回答

0

的十六进制转义序列是特定于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'不是可以逃脱的特殊字符。这实际上是调用八进制转义序列。

+0

“它是C/C++的一部分” - 更确切地说,它是C的一部分,它是C++的一部分。但问题只是标记了C,所以我不确定C++是否相关。 –

+2

@Keith Thompson第二,由于语言在类型上也有差异:在C'sizeof('\ xD')== sizeof(int)'中,而在C++中'sizeof('\ xD')== sizeof(char) – chux

+0

@chux哦,我不知道。这是否意味着所有的字面'char'都被解释为C中的int?所以它总是必须转换回'char'来分配? –

1

写东西像

char ch = 13; 

大多便携,在其上价值13是同样的事情,你的平台(上平台它是使用ASCII字符集,这的确是所有系统大多数系统)。

有可能是在其13可能意味着别的平台。但是,无论使用字符编码系统,使用'\r'都应该始终是便携式的。

使用其他值,不具有字符文字等值,是而不是便携式。并使用127以上的值甚至便携,从此以后你就是ASCII表外,并进入扩展ASCII表,其中字母可以取决于系统的区域设置。例如,西欧和东欧语言设置很可能在128255范围内具有不同的字符。

如果你想使用字节它可以包含而不使用char你可能会想要使用例如只是一些二进制数据,而不是字母, uint8_t,告诉其他读者你的代码,你没有使用变量的字母,但二进制数据。