2014-01-12 48 views
6

我想解析一個使用struct union類型的Nodejs上的緩衝區,我該如何在Nodejs上本地處理這個問題?我完全失去了。如何在Nodejs Buffer上處理類似於struct union類型的C?

typedef union 
{ 
    unsigned int value; 
    struct 
    { 
     unsigned int seconds :6; 
     unsigned int minutes :6; 
     unsigned int hours :5; 
     unsigned int days :15; // from 01/01/2000 
    } info; 
}__attribute__((__packed__)) datetime; 
+0

數據結構將是32位,它顯示了每個位的範圍意味着什麼,您只需要做一些按位操作來提取JS中的每一部分。 –

+0

我真的不知道如何,你能告訴我一個例子嗎? –

+0

有人開始使用node.js的ctypes端口:https://github.com/rmustacc/node-ctype這將解析大多數C結構,但它還沒有任意的位域支持,所以手動按位操作就像@MattGreer所說在這種情況下仍然是必要的。 –

回答

7

這一聯合可以是一個32位整數value,或info結構是分離成6,6,5和15位的塊的那些32位。我從來沒有在Node中使用過類似的東西,但我懷疑Node中它只是一個Number。如果是這樣的話,你可以在片這樣得到:

var value = ...; // the datetime value you got from the C code 

var seconds = value & 0x3F;   // mask to just get the bottom six bits 
var minutes = ((value >> 6) & 0x3F); // shift the bits down by six 
            // then mask out the bottom six bits 
var hours = ((value >> 12) & 0x1F); // shift by 12, grab bottom 5 
var days = ((value >> 17) & 0x7FFF); // shift by 17, grab bottom 15 

如果你不熟悉位操作,這可能看起來像巫術。在這種情況下,請嘗試一個教程like this one(它適用於C,但它仍然在很大程度上適用)

+1

你的回答讓我更加了解按位,而且我可以從現在開始繼續,我真的很高興,我不能夠感謝你。 –