c++ - 将 std::vector<char> 解释为 std::vector<short>

标签 c++ vector

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

相关文章:

c++ -::Instance() 是什么意思?

c++ - vector动态内存分配之private member vector

vector - VHDL表达式不是常数

javascript - 三个 JS 旋转组,与 View Cube/Orientation Cube 的相机方向相同

C++:将像 unique_ptr::get() 这样的参数传递给函数是否安全

c++ - Valgrind 导致长 double 的数字问题

c++ - 如何使用 qDebug 打印字符串文字和 QString?

c++ - 编写一个读取五个整数并执行一些任务的 C++ 程序

vector - 尝试索引到 Rust 中的向量时出现 SliceIndex 特征绑定(bind)不满足错误

c++ - 在 openGL 中加载 obj 文件