2013-04-11 60 views
0

我必須編寫一個C程序來編碼數據並將其存儲到緩衝區中,以便稍後在該緩衝區上執行某些操作。我具有以下結構:編碼和解碼數據C

typedef uint64_t time64; 
typedef int32_t sint32; 

typedef struct 
{ 
    sint32 latitude; 
    sint32 longitude; 
    int16_t elevation; 
}ThreeDLocation; 

typedef struct 
{ 
    uint8_t permission_indices; 
    char* data; 
    time64 expiry_time; 
    ThreeDLocation generation_location; 
}data; 

欲編碼/所述data結構解碼成單個緩衝器。我認爲這被稱爲「序列化」和「反序列化」。

任何人都可以給我一些關於如何解決這個問題的提示嗎?

+1

你將要保存這些數據到磁盤或以其他方式轉讓它超出了你當前的進程內存?序列化通常是指從數據結構創建可預測的字節流;目前尚不清楚這是否有必要。 – 2013-04-11 14:57:35

+0

不,我不存儲它,我將它轉移出當前進程。 – mmm 2013-04-11 15:44:43

回答

0

你可以嘗試只是點的整數的結構,並宣讀這樣:

data blockdata; 
int* serialdata; 
int i; 
int n = sizeof(data); 
filldata(&blockdata); 
serialdata = (int*)&blockdata; 

for(i = 0; i < n; i++) 
{ 
    globalbuffer[index++] = serialdata[i]; 
} 

不知道這是否有助於

+0

我不明白這實際上是如何工作的:什麼是索引++?而循環中的n有哪個大小?謝謝 – mmm 2013-04-11 16:17:23

+0

'n'是結構數據的大小;你可以使用n = sizeof(data),讓我把它包含在代碼中。索引只是用於全局緩衝區的一些全局索引。 – user1574047 2013-04-11 17:05:10

+0

只有在結構中沒有填充字節的情況下才有效... – stdcall 2013-04-11 17:36:54