C ++:将unsigned long long int转换为vector <char>,反之亦然</char>

时间:2012-01-25 15:52:57

标签: c++ syntax vector integer long-integer

任何人都可以告诉我如何将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];

任何人都可以告诉我该怎么做。

3 个答案:

答案 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]);