结构的std :: vector的大 - >小(小 - >大)端序转换

时间:2010-09-06 09:43:31

标签: c++ stl endianness

如何在结构矢量上执行字节序转换?

例如:

struct TestStruct
{
   int nSomeNumber;
   char sSomeString[512];
};

std::vector<TestStruct> vTestVector;

我知道如何交换int值,但是如何交换自定义结构的整个向量?

3 个答案:

答案 0 :(得分:2)

如评论中所述。 Endian交换向量中的每个元素:

auto iter = vTestVector.begin();
while( iter != vTestVector.end() )
{
    EndianSwap( iter->nSomeNumber );
    iter++;
}

答案 1 :(得分:0)

#include <boost/foreach.hpp>

BOOST_FOREACH(TestStruct& s, vTestVector)
{
  SwapEndian(s.nSomeNumber);
}

给予或接受,这样做。您不需要影响char字符串,只需要影响数字变量。 第

答案 2 :(得分:0)

如果您正在寻找一种通用方法(即单个模板元编程代码,可以让您迭代普通struct的元素,则递归到子struct s并在遇到它们时转换多字节整数值)然后你运气不好。遗憾的是,您无法在C ++中迭代任意struct的元素 - 因此您需要为每种不同类型编写特殊情况代码。