[問題] 如何cout出char裡面的內容以16進位表示

看板C_and_CPP作者 (技安)時間15年前 (2010/06/01 00:35), 編輯推噓0(0014)
留言14則, 3人參與, 最新討論串1/2 (看更多)
我想要讀入一個jpeg檔的binary data,為了確保我的確是讀對了 我寫了以下的code,但不幸的是buffer 因為是char type ,cout 出來的東西會是一堆亂碼。這樣我無法去跟我用Ultra Edit開啟此檔 的原始碼做比對。請問該如何寫? #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { ifstream JPobj("monalisa.jpg"); char buffer= 0 ; int i =0; while (i < 32) { JPobj.read(&(buffer), 1); i++; cout<<hex<<buffer; } system("pause"); return 0; } 最後自行的解決方法,雖然並不是我想要的 #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { ifstream JPobj("monalisa.jpg"); bool* buffer= new bool[8] ; int i =0; while (i < 32) { JPobj.read((char*)buffer, 1); i++; cout<<hex<<*buffer<<" "; } system("pause"); return 0; } sun大的建議我是有試過但卻沒印出東西 jame大的方法也會印出一些多餘的東西 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.132.180 ※ 編輯: rockwalking 來自: 114.43.132.180 (06/01 00:43)

06/01 00:45, , 1F
cout << hex << (int)buffer; 這樣?
06/01 00:45, 1F

06/01 00:48, , 2F
樓上似乎不行 轉(int)會多出垃圾
06/01 00:48, 2F

06/01 00:50, , 3F
那就unsigned char啊 或者弄個int assign後再印
06/01 00:50, 3F

06/01 00:51, , 4F
你怎會如此篤定印出來的東西是垃圾呢
06/01 00:51, 4F

06/01 00:52, , 5F
樓上我試試看
06/01 00:52, 5F

06/01 00:53, , 6F
覺得問題出在buf是text type,早該在開檔的時候用bin mode
06/01 00:53, 6F

06/01 00:55, , 7F
轉int 之後有些是對的 但會多出很多東西
06/01 00:55, 7F

06/01 00:56, , 8F
unsigned char 會在JPobj.read(&(buffer), 1); error
06/01 00:56, 8F

06/01 00:56, , 9F
我一直知道問題是buffer的type 但問題該怎樣改
06/01 00:56, 9F

06/01 00:57, , 10F
你已經知道問題在於buf是char type,何不開檔時使用bin mode
06/01 00:57, 10F


06/01 00:59, , 13F
printf("%2X", buffer);
06/01 00:59, 13F

06/01 01:05, , 14F
謝謝
06/01 01:05, 14F
※ 編輯: rockwalking 來自: 114.43.132.180 (06/01 01:13) ※ 編輯: rockwalking 來自: 114.43.132.180 (06/01 01:16)
文章代碼(AID): #1C0-LDtX (C_and_CPP)
文章代碼(AID): #1C0-LDtX (C_and_CPP)