任何想法。 我试过这个:
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 }
答案 0 :(得分:1)
您的代码没有按预期行事,因为reinterpret_cast
不会将int
更改为int8_t
s,它只会重新解释{{1}的值表示形式s作为字节。您应该使用int
:
malloc
和reinterpret_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
产生四个字节1
,0
,0
和0
,首先请记住{ {1}}作为32位整数等于1
,即三个字节的零和一个值为0x00000001
的字节。零和一个看起来相反是因为你在little-endian系统。