[問題] 關於StreamWriter與BinaryWriter問題

看板C_Sharp (C#)作者 (蔥頭)時間9年前 (2016/03/01 12:45), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
請問各位大大, 以下是我的程式碼 //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

03/01 12:56, , 1F
你的註解就是答案
03/01 12:56, 1F

03/01 13:58, , 2F
他的二進位是按照什麼編碼呢
03/01 13:58, 2F

03/01 14:04, , 3F
64 00 00 00是怎麼對應出來的?
03/01 14:04, 3F

03/01 14:06, , 4F
ascii 10進制100 16進制代表31 30 30
03/01 14:06, 4F

03/01 14:35, , 5F
100的16進位=64,4個byte就是00000064,存成little endian
03/01 14:35, 5F

03/01 14:43, , 6F
"100"的ascii才是31 30 30,先分清楚string和int
03/01 14:43, 6F

03/01 14:44, , 7F
StreamWriter(TextWriter)的Write(Int32)會先toString再寫
03/01 14:44, 7F

03/01 20:00, , 8F
StreamWriter(基底是TextWriter)寫入讀取是文字,使用指定
03/01 20:00, 8F

03/01 20:01, , 9F
的編碼方式將ToString()後的結果寫入資料流
03/01 20:01, 9F

03/01 20:04, , 10F
BinaryWriter則是比較複雜,數值之類的會直接以二進位寫入
03/01 20:04, 10F

03/01 20:06, , 11F
若寫入的是string則會使用指定的Encoding編碼寫入,且前面
03/01 20:06, 11F

03/01 20:06, , 12F
會加入長度
03/01 20:06, 12F
文章代碼(AID): #1MrHvr2K (C_Sharp)
文章代碼(AID): #1MrHvr2K (C_Sharp)