首先请原谅我有限的c知识但是如何在32位和64位平台上将char指针投射到一个长的?这段代码给了我一个编译器警告C4311与Visual Studio 2015
char *c;
long l;
l = (long)(c);
由于
修改
错误代码'输入':来自' char *'的指针截断长期' 可以downvotes让我知道为什么他们被投票?
答案 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