假设我有一个 vector :
std::vector <char> c;
c.push_back(0);
c.push_back(1);
c.push_back(0);
c.push_back(1);
我想把它转换成 std::vector<short> s
这样元素将:
s[0] == 256;
s[1] == 256;
因为如果你组合字符 0
和 1
它使256
在 short
.
像这样转换 vector 有没有更好的方法?
最佳答案
假设您对特定于实现的行为感到满意,在不寻常的架构上可能未定义,那么我会这样做:
short *ptr = reinterpret_cast<short*>(c.data());
std::vector<short> s(ptr, ptr+c.size()/2);
如果您想要将 char
的数组视为一半数量的 short
的小端表示,而不管实现的端序如何,然后它有点复杂。像这样:
std::vector<short> s;
s.reserve(c.size() / 2);
for (size_t idx = 0; idx < c.size(); idx += 2) {
s.push_back(c[idx] & 0xff + static_cast<unsigned>(c[idx+1]) << 8);
}
请注意,这仍然涉及从无符号类型到有符号类型的转换,因此它仍然依赖于实现。您需要更多的位操作才能使其真正便携。
关于c++ - 将 std::vector<char> 解释为 std::vector<short>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264881/