我在函数中收到int
值foo
,我需要从中创建unsigned char
的std :: vector。
矢量的大小不得大于所需的大小。这意味着,仅当foo > 255
向量的大小可能为2.如果foo > 0xFF
向量的大小可能是3,而foo > 0xFFFFFF
向量的大小必须为4。
我似乎无法根据int foo
的大小来确定向量的正确大小,然后在向量上访问int
到push_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));
答案 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,顺便说一下,有人可能想要捕获它或做一个断言)