【发布时间】:2015-01-15 16:34:38
【问题描述】:
在 C/C++ 中有没有办法在任何位置将 char 数组转换为 int?
我尝试了以下方法,如果我尝试使用带有非常量偏移的指针算法,它会自动对齐最近的 32 位(在 32 位架构上):
unsigned char data[8];
data[0] = 0; data[1] = 1; ... data[7] = 7;
int32_t p = 3;
int32_t d1 = *((int*)(data+3)); // = 0x03040506 CORRECT
int32_t d2 = *((int*)(data+p)); // = 0x00010203 WRONG
更新:
- 如 cmets 中所述,输入以 3 元组的形式出现,我不能 改变它。
- 我想进一步将 3 个值转换为 int 处理,并且这种转换应该尽可能快。
- 该 解决方案不必是跨平台的。我正在与一个非常 具体的编译器和处理器,所以可以假设是32 大端位架构。
- 结果的最低字节对我来说并不重要(见上文)。
我目前的主要问题是:为什么 d1 有正确的值而 d2 没有?这对其他编译器也是如此吗?这种行为可以改变吗?
【问题讨论】:
-
版主说明:cmets 下放。他们被删除了。如果您有答案,请发布。有更好的方法吗?发布它作为答案!抓住机会。
-
由于这似乎不可能,我通过一次使用 4 个像素来部分解决它以避免对齐问题。
-
这也不起作用...编译器似乎在 2^N 边界对齐。
标签: c++ c alignment reinterpret-cast pointer-arithmetic