2017-03-26 1 views
0

printfが正しく読み込まれたときにstd :: coutがベクトルからガーベジを読み込んでいますか?このコードで

// read bootrom 
std::ifstream bootrom_file (bootrom_path, std::ios::binary | std::ios::ate); 
const int bootrom_size = bootrom_file.tellg(); 
bootrom_file.seekg(0, std::ios_base::beg); 
// allocate bootrom_size bytes for the bootrom vector 
bootrom.resize(bootrom_size); 
if(bootrom_size != 0x100) 
{ 
    std::cerr << "boot ROM is not 256 bytes!\n"; 
} 
if(bootrom_file) 
{ 
    bootrom_file.read(reinterpret_cast<char*>(bootrom.data()), bootrom_size); 
} 
// prints 0xC3 0x31 
printf("%#02x %#02x\n", rom[0], bootrom[0]); 
// prints ? 1 
std::cout << std::hex << rom[0] << " " << std::hex << bootrom[0] << "\n"; 

のstd :: coutをプリントアウト? 1、printfは正しい0xC3 0x31を出力します。私はここで間違って何をしていますか?

romとbootromは両方ともuint8_tのstd :: vectorであり、romはbootromと同じコードを使用して設定されています。

+0

'rom'は' char'配列ですか? '(int)rom [0]'を試してください。 – AlexD

+0

私はそれがベクトルであることをそこに加えましたuint8_t –

+0

'typedef unsigned char uint8_t; 'のようなものがありますので、' cout'は文字を出力します。 – AlexD

答えて

1

解決策:私はそれを理解しました。これはtypedef charであるため、std :: coutはuint8_tを値で出力できないことを示しているので、代わりにascii文字を出力します。

+0

数字で印刷されたものにキャストしてください。 –

+0

明らかに私はそれをすでにやっていました。それが私がちょうど元の問題が何であるかを発表した理由です。すなわち私はそれを解決した。 –

関連する問題