2016-11-27 77 views
1

我想知道在编译/预处理期间是否可以将已知字符串转换为int。C - 在编译时将字符串转换为int

想象我与字符“AB”字符串,我想在一个工会把它变成一个INT,如:

union StrInt 
{ 
    int i; 
    char c[2]; 
} 

c[ ] = 'AB'会让我拥有价值16961

我想这样做,但在编译/预处理期间

+2

你为什么要这样做? –

+0

这对我的应用程序非常有用。 – user7122079

+3

C不是C++不是C.选一个! – Olaf

回答

1

是的。 在我的架构下(x86_64-PC-Linux的GNU ),这样的:

union { 
    int i; 
    char c[2]; 
} u = { .c="AB" }; 

int main() 
{ 
    printf("%d\n", u.i); 
} 

打印16961就像你期望的那样。 (不同的实现可能会给你不同的输出。)

字符数组通常可以用字符串文字初始化。

{ .c= { 'A', 'B' } } 

将成为初创c成员的另一种方式。

+0

但是这在预处理/编译期间完成了吗?还是执行?谢谢;) – user7122079

+0

“AB”被静态烘焙到二进制图像中,并且在运行时您只需以int形式访问。没有涉及转换。该值是静态已知的,但不是整数常量表达式(或现代C++方言中的constexpr)。 (实际上,它不可用,例如,在开关或其他需要整数常量的地方) – PSkocik

+0

多字符常量的定义非常差。不仅长度留给执行,而且还有永久性和编码。你应该更明确地指出这一点。 – Olaf