在 C code 處理記憶體時,有些偷閒招數是強制型態轉換,這時要移植到 node.js 運行的 js code 有點繞,整個開發過程就不斷在 c code 輸出 structure 的資訊,跟 js code 那端交叉比對,理解後也沒什麼難,就是要計算記憶體位置
C code:// 宣告typedef struct{char flag[16];unsigned int number1;unsigned int number2;unsigned int number3;unsigned int number4;} MyHeader;// 用法:{MyHeader *header;header = (MyHeader *)buffer;}
接著在 js code 要對應處理稍微累了點,但也還行:
const buffer = ....;const headerOffset = 0;const headerData = buffer.slice(headerOffset, headerOffset + 32);headerFlag = headerData.slice(0, 16).toString('ascii');headerNumber1 = headerData.readUInt32LE(16);headerNumber2 = headerData.readUInt32LE(20);headerNumber3 = headerData.readUInt32LE(24);headerNumber4 = headerData.readUInt32LE(28);
如此可以做簡單的 C Code 轉 node.js Javascript code。
建議移植時,要分別在 C & JS 輸出數值來比對,小步小步進行,避免程式碼很大包,最後出包了難 debug (大概稱得上 test-driven development 吧?)
沒有留言:
張貼留言