這真讓我困惑,比如說我想將一個整數保存到一個文件中,int x = 56,這個二進制數作爲內存中的56的表示形式的ascii相當於 00000000 00000000 00000000 00111000,這就是:null null null 8並將其寫入文件?我對麼?有人可以解釋這些雙重功能,我應該什麼時候使用他們每個人?即時通訊使用C#順便說一句。 thanx提前!一個Streamwriter和一個二進制打字機有什麼區別?
回答
StreamWriter
用於文本,BinaryWriter
寫入要寫入的實際二進制表示形式。我不是100%確定,但幾乎:)。
二進制寫入器寫入整數的內存中二進制表示。流寫入器寫入ASCII表示。一般來說,前者可以更加緊湊和高效(考慮編寫整數23861398 - 二進制編寫器將需要4個字節,但根據編碼,流編寫器需要8,16甚至32個),但後者導致純文本舊文本。
從MSDN頁StreamWriter和BinaryWriter,你可以清楚地看到不同之處:
的StreamWriter:
實現一個TextWriter在特定 編碼寫 字符流。
和:
的BinaryWriter:
在二進制寫入原始類型到一個 流和支持寫入字符串 特定的編碼。
第一個寫的東西作爲文本,二進制,little endian第二寫道,所以int x = 56
將被寫入00111000 00000000 00000000 00000000
。
從我能分辨出來... StreamWriter更多的是文本和BinaryWriter是原始類型,包括特定編碼的字符串。儘管BinaryWriter用二進制編寫,但對於那些以表面看待事物的人來說,這是一種誤導......就像我所做的那樣。我認爲,當我向底層流寫入一個整數時,它實際上將它寫入二進制文件,我可以再次讀取它作爲1和0的流。 爲了把東西放下,因爲它看起來在代碼:
MemoryStream stream = new MemoryStream();
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(35);
// is equivalent to doing:
stream.Write(BitConverter.GetBytes((int)35), 0, 4);
雖然使用的BinaryWriter位轉移到提取字節和BitConverter使用不安全的指針鑄造,結果是一樣的。一個int是32位或4個字節的長度,它所做的只是將表示該int的字節寫入其基礎流。
StreamWriter的不只是它的意思的文字同樣的事情,所以整數不會被轉換爲字節,而是以字符...這是類似於寫作:
byte[] buffer = Encoding.UTF8.GetBytes("my string here 1234");
stream.Write(buffer, 0, buffer.Length);
這就是爲什麼我說這是寫在二進制文件中的誤導,因爲它的確在技術上。將每個寫入的字節分解成若干位,並獲得二進制值。然而,說它將原始類型寫成字節數組會更有意義。如果您要將流轉換爲字符串,則不會得到1和0的字符串。
- 1. 65和二進制字母A有什麼區別?
- 2. 十六進制和字符數組打印有什麼區別?
- 3. StreamReader和StreamWriter可以讀寫一個二進制文件嗎?
- 4. 二進制crossentropy和二進制crossentropy與keras中的logits有什麼區別?
- 5. 在CSS中,第一個字母和第一個字母有什麼區別?
- 6. 陷阱和模擬與二進制翻譯有什麼區別?
- 7. 可轉換和二進制數據有什麼區別
- 8. MD5二進制模式和文本模式有什麼區別?
- 9. %和,在一個字符串中有什麼區別?
- 10. 二進制安全字符串和二進制不安全字符串有什麼區別?
- 11. 這2個進口有什麼區別?
- 12. 有序樹和有根樹有什麼區別? - 一個例子
- 13. StreamWriter有一個Bug?
- 14. 計算一個值的二進制模式時,ulong和long之間有什麼區別?
- 15. 塊中的一個線程和一個warp(32個線程)有什麼區別?
- 16. Socket和Transport之間有什麼區別,如果有一個
- 17. 只有一個參數時,$ @和$ 1之間有什麼區別?
- 18. 二進制文件解析;這兩個電話有什麼區別?
- 19. 調用Stream.Write和使用StreamWriter有什麼區別?
- 20. MySQL位與二進制位有什麼區別?
- 21. 二進制樹,僅打印一個級別(BFS)
- 22. 使用vi和hexedit打開一個二進制文件,爲什麼不同?
- 23. 兩個字符串有什麼區別?
- 24. ReactJS:componentDidUpdate和setState的第二個參數有什麼區別?
- 25. 在Ember中,這個和這個控制器有什麼區別
- 26. 這和那個有什麼區別
- 27. 返回一個Iterator和一個不可修改的列表有什麼區別?
- 28. 創建一個Web應用程序和一個網站有什麼區別?
- 29. 把@Autowired放到一個變量和一個方法之間有什麼區別?
- 30. 新的Uri(..)和新的UriBuilder(..)。Uri對於同一個主機有什麼區別?
這是二進制表示,而不是ASCII。 – 2011-01-06 11:25:10
00111000 = 0 * 1 + 0 * 2 + 0 * 4 + 1 * 8 + 1 * 16 + 1 * 32 + 0 * 64 + 0 * 128 = 56。 – 2011-01-06 12:31:06