当printf正确读取时,std :: cout从向量中读取垃圾?

时间:2017-03-26 15:36:41

标签: c++ c++11

在此代码中:

// 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相同的代码设置的。

1 个答案:

答案 0 :(得分:1)

解决方案:我明白了。事实证明std :: cout不能按值打印uint8_t,因为它是一个typedef字符,所以它会打印ascii字符。