作者evilkiss (evilkiss)
看板C_and_CPP
標題[問題] ofstream 總是寫成binary file
時間Tue Nov 5 19:03:28 2024
Ofstream file;
file.open(“test.txt);
uint8_t data[size] = {0x01, 0x23, 0x45, 0x67, 0x89,
0xAB, 0xCD, 0xEF};
for(in i=0;i<size;i++)
file<<hex<<data[i]<<endl;
file.close()
然後檔案開起來是亂碼 用hex editor 開 裡面資料正常
但我希望它是文字檔的輸出方式
請問我搞錯什麼地方了嗎?
希望輸出長下面那樣
01
23
45
67
89
AB
CD
EF
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.79.189.230 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1730804610.A.A11.html
1F:推 LPH66: 你的 data 的型態是什麼? 內容又是什麼?11/05 19:19
2F:→ LPH66: 啊, 你想輸出那個字的十六進位碼是嗎?11/05 19:19
3F:→ LPH66: 那改成 file << hex << (int)data[i]11/05 19:20
4F:→ LPH66: (從你的話猜你的 data 應該是字串型態)11/05 19:20
5F:→ evilkiss: 我已經轉成 uint8_t 的array11/05 20:19
※ 編輯: evilkiss (42.79.189.230 臺灣), 11/05/2024 20:25:26
※ 編輯: evilkiss (42.79.189.230 臺灣), 11/05/2024 20:27:10
6F:推 fenzhang: std::is_same<uint8_t, unsigned char>::value 在大部 11/05 21:16
7F:→ fenzhang: 分平台都是true,所以你其實是把 unsigned char 印出來 11/05 21:16
8F:→ fenzhang: ,另外對齊可能還要 setw 跟 setfill 11/05 21:16
9F:→ evilkiss: 感謝兩位大大 解惑 11/06 09:50
10F:推 wulouise: 不懂你想印的text到底是hex representation還是真hex 11/07 19:08
11F:→ wulouise: 沒有有編輯器把newline當換行的同時還能讀\x01成"01" 11/07 19:09
12F:推 logravis: 你的O應該是小寫吧? 11/23 12:55
13F:推 suhorng: 你要把 uint_8 轉成 unsigned int 01/05 14:03
14F:推 wulouise: 喔我看懂了,你需要`+data[i]`, +會幫你promote type 01/08 22:00