1

我有用C++編寫的本地應用程序。如何將郵件從Chrome擴展程序發送到本機應用程序?

我能夠從我的原生應用程序發送數據使用How to send message FROM native app TO Chrome extension?

Chrome擴展,但我無法找出其他的方式。

Chrome文檔。狀態:Chrome在單獨的進程中啓動每個本地消息傳遞主機,並使用標準輸入(標準輸入)和標準輸出(標準輸出)與它進行通信。使用相同的格式向兩個方向發送消息:每條消息都使用JSON,UTF-8編碼進行序列化,並且以本機字節順序排在32位消息長度之前。

如何讀取/解釋stdin中的數據,由chrome擴展發送?

如何讀取4字節長度信息以及發送UTF-8編碼的其餘數據?

請幫忙!

謝謝!

+0

本地應用程序只是一個爲特定平臺編寫的C++程序? – Acidic

+0

@酸酸是的。在我的情況下,它是Windows平臺。 – rohitvk

回答

1

爲了從stdin讀取JSON數據:

int _tmain(int argc, _TCHAR* argv[]) 
{ 

unsigned int length = 0; 
//read the first four bytes (=> Length) 
for (int i = 0; i < 4; i++) 
{ 
    length += getchar(); 
} 

//read the json-message 
string msg = ""; 
for (int i = 0; i < length; i++) 
{ 
    msg += getchar(); 
} 
} 
+0

感謝您的回答!有用! – rohitvk

+0

但是我現在面臨的問題是,當我將本機應用程序代碼放在連續(while)循環中時,它停止工作。 – rohitvk

+0

而且我也無法通過我的C++應用程序寫入任何文件(用於記錄目的)。這是安全限制嗎? – rohitvk

3

作爲評價提到有人,所提供的解決方案不會如果的長度比255更大工作。例如,如果實際長度爲296(二進制00000001 00101000),則前面提供的解決方案將產生41 => 00000001 + 00101000 = 1 + 40 = 41.

必須考慮讀取的字節數。在這個例子中,爲了計算長度正確的做法是1 *(2^8)+ 40 = 296所以正確的解決方案可能是:

unsigned int length = 0; 

//read the first four bytes 
for (int i = 0; i < 4; i++) { 
    int read_char = getchar(); 
    length += read_char * (int) pow(2.0, i * 8); 
} 
基於 變速位和位操作

更好溶液呈現以下(也許有點難以理解,但可以肯定的整潔):

unsigned int length = 0; 

for (int i = 0; i < 4; i++) { 
    unsigned int read_char = getchar(); 
    length = length | (read_char << i * 8); 
} 

此外還需要注意的getchar()返回INT正在執行位之前或與長度的電流值(轉換爲unsigned int類型是非常重要的int有一位保留爲符號,unsigned int不)。

現在,我不確定可能出現的潛在大/小端問題,因爲我沒有在不同架構上測試此解決方案。我希望有更多經驗的人可以對此發表評論。

相關問題