任何人都可以告诉我如何将unsigned long long int转换为vector,反之亦然。
为了从unsigned long long int转换为vector,我尝试了以下内容:
unsigned long long int x;
vector<char> buf(sizeof(x));
memcpy( &buf[0], &x, sizeof( x ) );
当我测试x = 1234567890时,它失败了。但是当我尝试使用较小的x值(比如1-100)时,它可以工作......
为了将vector转换为unsigned long long int,我使用了:
unsigned long long int = (unsigned long long int)buf[0];
任何人都可以告诉我该怎么做。
答案 0 :(得分:7)
请记住,复制字节不会跨平台移植。你的memcpy看起来很好,所以为什么不在回来的路上重新创建它?您编写的内容只需要向量的第一个字节并将其转换为unsigned long long
,这就解释了为什么它适用于小数字。
尝试使用此方法将值从矢量中取回:
unsigned long long int x;
memcpy(&x, &buf[0], sizeof(x));
答案 1 :(得分:4)
您可以使用memcpy
执行复制,而不是std::vector::assign
直接进入矢量。
#include <iostream>
#include <vector>
int main()
{
unsigned long long int x = 0x0807060504030201;
std::vector<char> v;
v.assign( reinterpret_cast<char *>( &x ), reinterpret_cast<char *>( &x ) + sizeof( x ) );
for( auto i = v.begin(); i != v.end(); ++i ) {
std::cout << std::hex << static_cast<int>( *i ) << ' ';
}
std::cout << std::endl;
// To convert back
auto y = *reinterpret_cast<unsigned long long int *>( &v[0] );
std::cout << "y = " << std::hex << std::showbase << y << std::endl;
return 0;
}
输出:
1 2 3 4 5 6 7 8
y = 0x807060504030201
答案 2 :(得分:3)
你必须改变你的最后一行:
memcpy( &buf[0], reinterpret_cast<char*>(&x), sizeof( x ) );
编辑我说的是废话,这条线很好,但你的转换很糟糕 - 你转换了值而不是指针:
unsigned long long int val = *reinterpret_cast<unsigned long long int*>(&buf[0]);