【发布时间】:2017-08-21 21:23:50
【问题描述】:
我想要做的是将数据存储在std::vector<short> 中的std::vector<uint8_t> 中,将每个short 分成两个uint8_t 值。我需要这样做,因为我有一个只会发送std::vector<uint8_t> 的网络应用程序,所以我需要转换为 uint8_t 发送,然后在收到 uint8_t 向量时转换回来。
通常我会做的(以及我在查找问题时看到的)是:
std::vector<uint8_t> newVec(oldvec.begin(),oldvec.end());
但是,如果我理解正确,这将采用每个单独的短值,截断为 uint8_t 的大小,并创建一个包含一半数据量和相同条目数的新向量,而我想要的是相同的具有两倍条目的数据量。
包含一种方法来逆转该过程并尽可能避免复制的解决方案将有很大帮助。谢谢!
【问题讨论】:
-
只是
memcpydata() 从一个到另一个? -
不错,@VTT,但为一些端序怪异留出了空间。
-
花点时间校对你写的东西。
store the data in a std::vector in a std::vector这样的短语不太可能引起同情。 -
@Mikhail 相关的差异隐藏在 angulars 中。我进行了编辑以使其可见。
-
@DavidSchwartz 我将使用大端序,所以短的 0000000000000001 将作为两个条目存储在 uint8_t 向量中,00000000 和 00000001。理论上我不应该处理字节序问题因为代码总是在同一台计算机上运行,并且我可以控制序列化和反序列化,但我正在努力使其尽可能便携。我不确定如何在不知道字节顺序的情况下在具有不同字节顺序的机器上正确重建短裤。有一个关于重建检查字节顺序的 if 语句?