2010-09-06 82 views
1

如何對結構體的vector進行endian轉換?結構體std :: vector的big-> little(little-> big)endian轉換

例如:

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

std::vector<TestStruct> vTestVector; 

我知道如何交換int類型,但如何交換:自定義結構的整體載體?

+5

如果我理解你的結構,唯一需要endian交換的字段是nSomeNumber。所以就像平時一樣繞着向量循環,然後只交換int字段。 char數組字段在兩端都是相同的。 – bramp 2010-09-06 09:46:11

+0

您可以循環使用向量的元素,並將向位置轉換應用於向量中的每個結構。或者你的問題是什麼? – Dummy00001 2010-09-06 09:46:37

+0

如果'nSomeNumber'應該在某個時間通過網絡,則應該使用固定大小的整數類型(類似於'uint16_t'或'uint32_t'),因爲int的大小是**而不是** 。 – ereOn 2010-09-06 09:52:44

回答

2

正如評論中所述。尾段交換向量中的每個元素:

auto iter = vTestVector.begin(); 
while(iter != vTestVector.end()) 
{ 
    EndianSwap(iter->nSomeNumber); 
    iter++; 
} 
0
#include <boost/foreach.hpp> 

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

給予或採取,這會做到這一點。你不需要影響字符串,只是數字變量。 s。

0

如果您正在尋找一種通用的方法來完成此操作(即,一段模板元編程代碼,它可以讓您遍歷純代碼元素,遞歸到子代structs並隨時轉換多字節整數值他們遇到),那麼你的運氣不好。不幸的是,你不能迭代C++中任意struct的元素 - 所以你需要爲每種不同的類型編寫特殊的代碼。