如何對結構體的vector進行endian轉換?結構體std :: vector的big-> little(little-> big)endian轉換
例如:
struct TestStruct
{
int nSomeNumber;
char sSomeString[512];
};
std::vector<TestStruct> vTestVector;
我知道如何交換int類型,但如何交換:自定義結構的整體載體?
如何對結構體的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