[問題] ofstream 總是寫成binary file

作者: evilkiss (evilkiss)   2024-11-05 19:03:28
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
作者: LPH66 (-6.2598534e+18f)   2024-11-05 19:19:00
你的 data 的型態是什麼? 內容又是什麼?啊, 你想輸出那個字的十六進位碼是嗎?那改成 file << hex << (int)data[i](從你的話猜你的 data 應該是字串型態)
作者: evilkiss (evilkiss)   2024-11-05 20:19:00
我已經轉成 uint8_t 的array
作者: fenzhang (分帳)   2024-11-05 21:16:00
std::is_same<uint8_t, unsigned char>::value 在大部分平台都是true,所以你其實是把 unsigned char 印出來,另外對齊可能還要 setw 跟 setfill
作者: evilkiss (evilkiss)   2024-11-06 09:50:00
感謝兩位大大 解惑
作者: wulouise (在線上!=在電腦前)   2024-11-07 19:08:00
不懂你想印的text到底是hex representation還是真hex沒有有編輯器把newline當換行的同時還能讀\x01成"01"
作者: logravis (就酷阿)   2024-11-23 12:55:00
你的O應該是小寫吧?
作者: suhorng ( )   2023-01-05 14:03:00
你要把 uint_8 轉成 unsigned int
作者: wulouise (在線上!=在電腦前)   2023-01-08 22:00:00
喔我看懂了,你需要`+data[i]`, +會幫你promote type

Links booklink

Contact Us: admin [ a t ] ucptt.com