将char指针指向long

时间:2016-10-03 22:57:41

标签: c

首先请原谅我有限的c知识但是如何在32位和64位平台上将char指针投射到一个长的?这段代码给了我一个编译器警告C4311与Visual Studio 2015

char *c;
long l;
l = (long)(c);

由于

修改

错误代码'输入':来自' char *'的指针截断长期' 可以downvotes让我知道为什么他们被投票?

2 个答案:

答案 0 :(得分:5)

如果可以避免,请不要这样做。

C99(及更新版本)支持名为uintptr_t的类型。它是一个能够保存指针值的整数类型。有关详细信息,请参阅stddef.h

不知道Visual Studio是否完全支持C99。因此,您可能无法实现这一点,但值得一试。

char* c = <some value>;
uintptr_t ptr = (uintptr_t)c;

如果您将c源文件编译为C ++源代码(使用/TC编译器选项),您应该可以使用它。

答案 1 :(得分:1)

将指针转换为整数的目的是什么?您可以使用union,或struct,或者可能使用void *。

Microsoft编译环境默认为LLP64,其中long为32位宽,如果指针为64位宽,则可能太窄。 - &GT; https://msdn.microsoft.com/en-us/library/cc953fe1.aspx