结构体std :: vector的big-> little(little-> big)endian转换
问题描述:
如何对结构体的vector进行endian转换?结构体std :: vector的big-> little(little-> big)endian转换
例如:
struct TestStruct
{
int nSomeNumber;
char sSomeString[512];
};
std::vector<TestStruct> vTestVector;
我知道如何交换int类型,但如何交换:自定义结构的整体载体?
答
正如评论中所述。尾段交换向量中的每个元素:
auto iter = vTestVector.begin();
while(iter != vTestVector.end())
{
EndianSwap(iter->nSomeNumber);
iter++;
}
答
#include <boost/foreach.hpp>
BOOST_FOREACH(TestStruct& s, vTestVector)
{
SwapEndian(s.nSomeNumber);
}
给予或采取,这会做到这一点。你不需要影响字符串,只是数字变量。 s。
答
如果您正在寻找一种通用的方法来完成此操作(即,一段模板元编程代码,它可以让您遍历纯代码元素,递归到子代struct
s并随时转换多字节整数值他们遇到),那么你的运气不好。不幸的是,你不能迭代C++中任意struct
的元素 - 所以你需要为每种不同的类型编写特殊的代码。
如果我理解你的结构,唯一需要endian交换的字段是nSomeNumber。所以就像平时一样绕着向量循环,然后只交换int字段。 char数组字段在两端都是相同的。 – bramp 2010-09-06 09:46:11
您可以循环使用向量的元素,并将向位置转换应用于向量中的每个结构。或者你的问题是什么? – Dummy00001 2010-09-06 09:46:37
如果'nSomeNumber'应该在某个时间通过网络,则应该使用固定大小的整数类型(类似于'uint16_t'或'uint32_t'),因为int的大小是**而不是** 。 – ereOn 2010-09-06 09:52:44