我正在尝试使用std :: vector作为memmory缓冲区:
int main( )
{
int i = 0x01020304;
size_t size = sizeof(int);
std::vector<char> data;
data.insert( data.end(), (char*)&i, (char*)(&i + size) );
for ( int i = 0; i < data.size(); ++i){
std::cout << int(data[i]) << std::endl;
}
return 0;
}
我期待输出 4 3 2 1
但我得到了
4
3
2
1
51
73
-107
81
-9
127
0
0
36
-7
84
-50
有人可以解释我做错了吗?
答案 0 :(得分:2)
只是为了添加其他问题,当你避免代码重复并使其更具可读性时,你也可以避免一些错误:
int i = 0x01020304;
std::vector<char> data;
char *begin = reinterpret_cast<char *>( &i );
data.insert( data.end(), begin, begin + sizeof(i) ) );
你可能需要使用不同的类型:
template<typename T>
void insertData( std::vector<char> &data, T value )
{
char *begin = reinterpret_cast<char *>( &value );
data.insert( data.end(), begin, begin + sizeof(value) ) );
}
答案 1 :(得分:1)
使用(char*)(&i + size)
增加指向int
的指针,而不是指向char的指针。由于size
似乎是4
,因此您发现自己添加了4
整数而不是4
字符的数据。
auto cp = reinterpret_cast<char*>(&i);
data.insert( data.end(), cp, cp + size );
答案 2 :(得分:1)
大小以字节为单位,因此您需要增加char *,而不是int *。
data.insert( data.end(), (char*)&i, (char*)(&i)+size );