gpt4 book ai didi

c++ - 将 std::vector 解释为 std::vector

转载 作者:行者123 更新时间:2023-11-30 00:51:33 35 4
gpt4 key购买 nike

假设我有一个 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;

因为如果你组合字符 01它使256short .

像这样转换 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com