使用std::hex
修饰符。您可以使用std::vector
来简化数据加载:
#include <vector>
#include <fstream>
#include <iostream>
#include <stdint.h>
int main()
{
std::ifstream inFile("inFile.txt");
std::vector<uint8_t> data;
data.reserve(512);
unsigned int temp;
while(!inFile.eof()) {
inFile >> std::hex >> temp;
data.push_back(temp);
}
// Print one element per row
std::vector<uint8_t>::iterator i;
for (i = data.begin(); i != data.end(); ++i) {
std::cout << static_cast<unsigned> (*i) << std::endl;
}
// C++11 version (more compact)
// for (auto i = data.begin(); i != data.end(); ++i) {
// std::cout << static_cast<unsigned> (*i) << std::endl;
// }
return 0;
}
请注意,十六进制数字被读取为unsigned int
: 这是因为int8_t
被视为char
,因此提取ifstream
将一次发生一个字符,而不是一次发生一个数字。这仅适用于temp
,因为您的结果是一个uint8_t
数组,正如您所愿。打印时也会发生同样的情况:我转换回unsigned
,因此它显示为数字,而不是字符代码。
请注意,这是一个示例。你应该在你的代码中做更多的错误检查。