【发布时间】:2015-10-01 13:10:19
【问题描述】:
我有一个包含 int32_t 的向量,我正在使用 Windows 64 位。我需要将其转换为 int 数组。
由于在我的特定平台上 int32_t 和 int 本质上是相同的类型,我可以这样做:(假设数组有足够的空间来保存向量中的所有数据)
int out[1000]; //assuming that in has less data than 1000
std::vector<int32_t> in=getdata();
memcpy(out,&int[0],in.size());
但它适用于 uint32_t 和 int 本质上是同一类型的平台。
确保它独立于平台并且可以在任何平台上工作的最佳方法是什么,例如 int 不是 32 位?
【问题讨论】:
-
unsigned int可以保存int不能保存的值,因此您可能无法获得相同的值。 -
我有点担心本质上是同一类型,因为即使
uint32_t是unsigned int,int仍然是签名的,所以对于任何超越INT_MAX赌输了。 -
更新了问题以反映您的 cmets。
-
只要您创建与向量相同类型的数组 - 此代码将是可移植的。见en.cppreference.com/w/cpp/container/vector/data(底层存储必须是数组)
-
如果
sizeof (int) == sizeof (int32_t)成立,你就不能使用in.data()吗?