我想知道一個實用程序是否可能生成二進制數據(即圖形圖像)並通過IO控制檯輸出它們,而另一個應用程序指示這些數據的性質並通知傳入字節的數量,能夠從IO控制檯讀取它。C/C++:是否可以通過控制檯傳遞二進制數據?
3
A
回答
3
是的,這是可能的。雖然通常情況下,文本是有意爲文本的,但有許多程序設計用於從標準I/O通道獲取二進制輸入或寫入二進制輸出。
您唯一需要注意的是通常在Windows下以文本模式打開stdout
/stdin
,所以您應該將它們切換到二進制模式以避免字符轉換。
要在Windows上stdin
/stdout
設置二進制模式下,你需要使用_setmode電話:
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(void)
{
int result;
// Set "stdin" to have binary mode:
result = _setmode(_fileno(stdin), _O_BINARY);
if(result == -1)
perror("Cannot set mode");
else
printf("'stdin' successfully changed to binary mode\n");
}
還要注意注意文件緩衝。通常,程序只會在輸出到交互式控制檯時刷新緩衝區,而不是其他進程。因此,如果您需要同步,請在寫入消息後記得撥打fflush
,否則其他進程將無法獲取數據。
0
您可以使用傳統的socket或打火機named pipe這種事情。
1
您可以Base 64-Encode/Decode的數據。這將避免需要在標準輸入/輸出流上發送純粹的「比特」。
-1
如果您選擇適當的編碼,您可以這樣做,因爲控制檯是文本流。使用例如Base64編碼爲您的二進制數據,它會正常工作。另一種選擇是「Quoted-printable」格式。當然最終的字節數比原始二進制數據多,但恕我直言,唯一的方法就是使用控制檯安全地執行它。
0
如果進程將在另一個進程中進行託管,該進程將從寫入二進制數據的進程捕獲標準輸出,則無需對其進行編碼。在這種情況下,您可以將原始二進制數據寫入輸出並完成它。這是例如graphviz中寫入dot
工具的圖像如何工作的,默認情況下,它不對其輸入進行編碼。通過在命令shell中使用>
,這些類型的工具也很容易通過管道傳輸到文件。
只有當數據輸出將在控制檯上顯示時,您才需要對其進行編碼。打印圖像文件的內容並不是一個好主意。
相關問題
- 1. 通過控制檯將二進制數據從C傳遞到C#
- 2. 傳輸二進制數據通過ttyACM
- 3. 傳遞二進制數據到S3 PutObject
- 4. SWIG:傳遞二進制數據失敗
- 5. 是否可以通過GAE直接郵寄上傳的二進制文件?
- 6. 是否可以用二進制編程?
- 7. 我可以通過XDomainRequest正確讀取二進制數據嗎?
- 8. 是否可以從控制檯從Whisper(Graphite DB)查詢數據?
- 9. 是否可以訪問GLKTextureInfo中的二進制圖像數據?
- 10. 控制檯可以通過編程語言來控制嗎?
- 11. 通過http接收二進制數據
- 12. 通過C++讀取二進制數據
- 13. 通過webob.Response返回二進制數據
- 14. 通過控制檯
- 15. 後二進制數據從控制檯應用程序
- 16. 使用`cout`查看控制檯上的二進制數據
- 17. C++通過遞歸二進制搜索
- 18. 是否可以通過Windows中的批處理文件將輸入傳遞給控制檯應用程序?
- 19. 是否可以將數據從控制器傳遞到內核計劃?
- 20. 是否可以通過HwndHost控件來繪製WPF控件?
- 21. 什麼是通過遏制視圖控制器將數據傳遞
- 22. 是否可以在Chrome控制檯中保存過濾器?
- 23. 是否可以將委託傳遞給控制器操作?
- 24. 如何通過xmlrpc(python)傳輸二進制數據?
- 25. 通過藍牙傳輸二進制數據
- 26. 通過http流式傳輸二進制數據
- 27. 通過管道傳送二進制數據C
- 28. 通過HTTP請求將二進制數據上傳到AppEngine Blobstore
- 29. 通過發佈請求傳輸django二進制文件數據
- 30. 通過LiveConnect將JavaScript中的二進制數據傳遞到Java小程序
爲什麼有些人在這裏談論Base64編碼? Dervall是否正確如果數據不顯示,我不需要它? (數據其實不是) – P5music 2012-03-04 11:13:48
@ P5music:問問他們。就像我說的,有很多程序可以輸入或輸出二進制數據(例如,您可以使用'ffmpeg'來解碼電影並將輸出寫入原始YUV幀,以便其他程序可以處理該視頻,或者如果您想對磁盤單元執行原始數據壓縮備份,則可以在Linux中使用'dd - if =/dev/whatever | gz> backup.dd.gz',它完美的工作)。在Windows上,這是文本/二進制模式的煩人的事情,但它可以解決。當然在終端拋出二進制數據將是可怕的,但如果輸出到另一個進程,那麼一切正常... – 6502 2012-03-04 11:24:43
請你能告訴我printf指令發送數據(我知道字節數和指針)從C應用程序的控制檯? – P5music 2012-03-05 18:15:49