当我意识到假设一个int可能是一个指向长度为4个字节的指针时,我的编程正常。
如果您正在处理具有32位有符号整数样本的某些内容(例如波形),该怎么办?您将字节指针转换为(int *)并一次处理一个样本。
我只是很好奇获取4字节指针的“安全方式”是什么,如果将来MSVC委员会决定int
现在是8个字节,则不会停止工作。
答案 0 :(得分:7)
您的编译器可能有一个名为stdint.h
的C99标头。它定义了类似uint32_t
的类型,一个无符号的32位整数。
从C ++ 11开始,您的编译器需要具有此标头。您应该将其包含在#include <cstdint>
。
如果没有,请查看Boost Integer,将此标头模仿为<boost/cstdint.hpp>
。
要将指针存储为整数,请使用在同一标题中定义的intptr_t
。
答案 1 :(得分:3)
使用指向uint32_t的指针而不是int。
此类型(和其他类型)在stdint.h中定义,是C99标准的一部分
答案 2 :(得分:0)
我看到它完成的一种方法是使用预编译器指令和typedef抽象出大小。然后使用抽象类型,这些类型对于您要支持的系统集是正确的。
答案 3 :(得分:0)
也许你可以在sizeof(int)上使用一个断言,这样至少如果你的假设在将来被违反,你就会知道。
答案 4 :(得分:0)
到目前为止,最简单的解决方案是char*
到char[4]
。在每个平台上,char[4]
是一个4字节的对象。对于整个波形,您可能需要char[4*512]