将单字节的整数值复制到无符号字符的向量

时间:2017-02-21 09:19:36

标签: c++ vector

我在函数中收到intfoo,我需要从中创建unsigned char的std :: vector。 矢量的大小不得大于所需的大小。这意味着,仅当foo > 255向量的大小可能为2.如果foo > 0xFF向量的大小可能是3,而foo > 0xFFFFFF向量的大小必须为4。 我似乎无法根据int foo的大小来确定向量的正确大小,然后在向量上访问intpush_back的正确字节。 任何帮助表示赞赏!谢谢!

这是我到目前为止所做的:

    size_t foo2= foo;
    size_t bytes = 0;
    while (foo2!= 0)
    {
        foo2/= (1u << CHAR_BIT);
        bytes++;
    }
    std::vector<unsigned char> myVec(bytes);

    for (size_t i = 0; i < bytes; i++)
        myVec[bytes-1-i]=(*((char*)&foo+ i));

1 个答案:

答案 0 :(得分:3)

为什么不这么简单?

size_t foo2 = foo;

std::vector<unsigned char> myVec;
myVec.clear();

//special case if myVec should not be empty for foo = 0
if(foo2 == 0){
    myVec.push_back(0);
}

while(foo2 > 0){
    unsigned char current_part = (unsigned char) (foo2 % 256);
    myVec.push_back(current_part);
    foo2 /= 256;
}

然后可能会反转,具体取决于所需的endian。 (#include&lt; algorithm&gt; std :: reverse(myVec.begin(),myVec.end());)

(我的代码假设foo&gt; = 0,顺便说一下,有人可能想要捕获它或做一个断言)