作者rockwalking (技安)
看板C_and_CPP
標題[問題] 如何cout出char裡面的內容以16進位表示
時間Tue Jun 1 00:35:20 2010
我想要讀入一個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)
→ james732:cout << hex << (int)buffer; 這樣? 06/01 00:45
→ rockwalking:樓上似乎不行 轉(int)會多出垃圾 06/01 00:48
→ sunneo:那就unsigned char啊 或者弄個int assign後再印 06/01 00:50
→ sunneo:你怎會如此篤定印出來的東西是垃圾呢 06/01 00:51
→ rockwalking:樓上我試試看 06/01 00:52
→ sunneo:覺得問題出在buf是text type,早該在開檔的時候用bin mode 06/01 00:53
→ rockwalking:轉int 之後有些是對的 但會多出很多東西 06/01 00:55
→ rockwalking:unsigned char 會在JPobj.read(&(buffer), 1); error 06/01 00:56
→ rockwalking:我一直知道問題是buffer的type 但問題該怎樣改 06/01 00:56
→ sunneo:你已經知道問題在於buf是char type,何不開檔時使用bin mode 06/01 00:57
→ james732:printf("%2X", buffer); 06/01 00:59
→ rockwalking:謝謝 06/01 01:05
※ 編輯: rockwalking 來自: 114.43.132.180 (06/01 01:13)
※ 編輯: rockwalking 來自: 114.43.132.180 (06/01 01:16)