如何将Int32数组指针转换为Int8_t数组指针?

时间:2017-03-31 09:29:52

标签: c++11

任何想法。 我试过这个:

int *p = (int*)malloc(N*sizeof(int));
...//set the value of p
int8_t *q = reinterpret_cast<int8_t *>(p);

但它不起作用。我想得到结果q 连续。但结果表明,如果p有4个元素:{1,2,3,4,5,6,7,8},那么q将是{1,0,0,0,2,0,0,0 }

2 个答案:

答案 0 :(得分:1)

您的代码没有按预期行事,因为reinterpret_cast不会将int更改为int8_t s,它只会重新解释{{1}的值表示形式s作为字节。您应该使用int

,而不是使用mallocreinterpret_cast
std::vector

然后,如果真的需要//create an int vector of size N std::vector<int> p (N); //copy p contents into a vector of int8_t std::vector<int8_t> q {p.begin(), p.end()}; ,你可以使用int8_t,但最好只使用向量或迭代器而不是原始指针。

答案 1 :(得分:0)

您将一种类型的指针强制转换为另一种类型的指针。你基本上只是指定一个指向另一个指针的指针。就是这样。

没有复制第一个指针指向的数据。第一个指针指向的数据没有修改。在赋值之后,你将有两个不同的指针指向完全​​相同的数据。

这样的事情:

+---+
| p | --\
+---+    \     +------------------------------+
          >--> | 32-bit integer data here ... |
+---+    /     +------------------------------+
| q | --/
+---+

至于为什么32位整数1产生四个字节1000,首先请记住{ {1}}作为32位整数等于1,即三个字节的零和一个值为0x00000001的字节。零和一个看起来相反是因为你在little-endian系统。