c++ - 如何将来自 std::vector<short> 的数据存储在 std::vector<uint8_t> 中

标签 c++ vector

我想做的是将数据存储在 std::vector<short> 中在std::vector<uint8_t> ,将每个 short 分成两个 uint8_t 值。我需要这样做,因为我有一个只会发送 std::vector<uint8_t> 的网络应用程序的,所以我需要转换为 uint8_t 以发送,然后在收到 uint8_t vector 时转换回来。

通常我会做的(以及我在查找问题时看到的)是:

std::vector<uint8_t> newVec(oldvec.begin(),oldvec.end());

但是,如果我理解正确,这将采用每个单独的短值,截断为 uint8_t 的大小,并在我想要的相同时创建一个包含一半数据量和相同条目数的新 vector 条目数量翻倍的数据量。

包含逆向过程的方法并尽可能避免复制的解决方案会有很大帮助。谢谢!

最佳答案

要在 8 位边界处拆分某些内容,您可以使用右移和掩码,即

uint16_t val;
uint8_t low = val & 0xFF;
uint8_t high = (val >> 8) & 0xFF;

现在您可以将最高价和最低价放入订单中的第二个 vector 中。

关于c++ - 如何将来自 std::vector<short> 的数据存储在 std::vector<uint8_t> 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805727/

相关文章:

c++ - 向用户显示异常调试信息

c++ - 我的逻辑有什么问题?

c++ - std::vector<T>::clear() 是否调用内容的析构函数?

c++ - 将 vector<char>* 传递给函数 getnameinfo

c++ - 对两个彼此平行的 int vector 的元素求和

vector - 我如何在 Rust 中处理切片范围?

c++ - 中断 sleep() 函数

c++ - 没有对角线移动的 Dijkstra 算法

c++ - 将锁定的 std::unique_lock 移交给新线程

vector.erase() 上的 C++ 分段失败