如何转换vector<unsigned long> v;
为char buffer[sizeof(unsigned long)*v.size()]
; 反之亦然。
我尝试过
std::copy(b.begin(), b.end(), buffer);
和v.insert()
而结果是不明确的。任何人都可以建议如何做到这一点。
例如,您可以尝试以下方法
#include <iostream>
#include <vector>
#include <cstring>
#include <numeric>
int main()
{
std::vector<unsigned long> v = { 1, 2, 3 };
char *p = new char[sizeof( unsigned long ) * v.size()];
std::accumulate( v.begin(), v.end(), p,
[]( char *p, unsigned long x)
{
return memcpy( p, &x, sizeof( x ) ), p + sizeof( x );
} );
std::vector<unsigned long> v2( v.size() );
char *q = p;
for ( auto &x : v2 )
{
memcpy( &x, q, sizeof( x ) );
q += sizeof( x );
}
for ( auto x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
delete []p;
return 0;
}
输出是
1 2 3
lambda表达式中的return语句也可以这样写
return ( char * )memcpy( p, &x, sizeof( x ) ) + sizeof( x );
或者确实可以按照以下方式将整个向量复制到字符缓冲区中
std::memcpy( p, v.data(), v.size() * sizeof( unsigned long ) );
例如
#include <iostream>
#include <cstring>
#include <vector>
int main()
{
std::vector<unsigned long> v = { 1, 2, 3 };
char *p = new char[sizeof( unsigned long ) * v.size()];
memcpy( p, v.data(), v.size() * sizeof( unsigned long ) );
std::vector<unsigned long> v2( v.size() );
char *q = p;
for ( auto &x : v2 )
{
memcpy( &x, q, sizeof( x ) );
q += sizeof( x );
}
for ( auto x : v2 ) std::cout << x << ' ';
std::cout << std::endl;
delete []p;
return 0;
}
而不是这个循环
char *q = p;
for ( auto &x : v2 )
{
memcpy( &x, q, sizeof( x ) );
q += sizeof( x );
}
您也可以使用memcpy。例如
memcpy( v2.data(), p, v2.size() * sizeof( unsigned long ) );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句