作者tas72732002 (蔥頭)
看板C_Sharp
標題[問題] 關於StreamWriter與BinaryWriter問題
時間Tue Mar 1 12:45:39 2016
請問各位大大, 以下是我的程式碼
//SteamWirter: 按照字元格式寫入檔案
//BinaryWriter: 按照二進位格式寫入檔案
FileStream fs = File.Open("E:\\MyFile.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.ASCII);
BinaryWriter bw = new BinaryWriter(fs System.Text.Encoding.ASCII);
sw.Write(100);
bw.Write(100);
sw.Close();
bw.Close();
我用UltraEdit 16進制來查看, 發現
sw的輸出為31 30 30
bw的輸出為64 00 00 00
兩個都使用了相同的編碼方式, 我想請問bw輸出64 00 00 00有對照表嗎?
請問他寫的二進制格式是用什麼編碼的啊? 怎麼看起來不像是ASCII的呢?
還是說我搞錯了?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.216.89.1
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1456807541.A.094.html
推 YahooTaiwan: 你的註解就是答案 03/01 12:56
→ tas72732002: 他的二進位是按照什麼編碼呢 03/01 13:58
→ tas72732002: 64 00 00 00是怎麼對應出來的? 03/01 14:04
→ tas72732002: ascii 10進制100 16進制代表31 30 30 03/01 14:06
→ ssccg: 100的16進位=64,4個byte就是00000064,存成little endian 03/01 14:35
→ ssccg: "100"的ascii才是31 30 30,先分清楚string和int 03/01 14:43
→ ssccg: StreamWriter(TextWriter)的Write(Int32)會先toString再寫 03/01 14:44
→ Litfal: StreamWriter(基底是TextWriter)寫入讀取是文字,使用指定 03/01 20:00
→ Litfal: 的編碼方式將ToString()後的結果寫入資料流 03/01 20:01
→ Litfal: BinaryWriter則是比較複雜,數值之類的會直接以二進位寫入 03/01 20:04
→ Litfal: 若寫入的是string則會使用指定的Encoding編碼寫入,且前面 03/01 20:06
→ Litfal: 會加入長度 03/01 20:06