以下のコードにて16進数のデータファイルを読み込み、1バイトずつデータを配列aに格納したいです。
c++
1#include <fstream> 2#include <iostream> 3#include <string> 4#include <vector> 5//using namespace std; 6 7class read_rom{ 8public: 9 int rom_data; 10 void fetch(std::string filename); 11}; 12 13void read_rom::fetch(std::string filename){ 14 std::ifstream ifs(filename); 15 16 if (!ifs){ 17 std::cout << "Error! File can not be opened" << std::endl; 18 }else{ 19 std::string buf; 20 std::vector<int> a; 21 int n = 0; 22 while (std::getline(ifs, buf, ' ')){ 23 24 std::cout << std::hex << std::showbase << buf << std::endl; 25 // std::cout << std::hex << std::showbase << buf << std::endl; 26 int buf_num = std::stoi(buf, nullptr, 16); 27 int up = buf_num >> 8 & 0xff; 28 a.push_back(up); 29 int down = buf_num & 0xff; 30 a.push_back(down); 31 } 32 std::cout << std::hex << std::showbase << a[16] << std::endl; 33 34 } 35 36 37} 38 39int main(){ 40 read_rom rom; 41 std::string filename = "test"; 42 rom.fetch(filename); 43} 44
データファイル"test"は以下のものを使用しています。
test
1c506 004f 09c1 c900 c321 09e1 d1c1 f1c9 2c3d9 00f2 1600 0000 c380 ff00 0000 0000 3c319 0800 0000 0000 f3cd b104 d900 0000 4c301 0700 0000 0000 c338 0000 0000 0000 5c303 c700 0000 0000 c306 c787 8787 8787 687c9 2929 2929 2929 29c9 2929 2929 2929 72909 c929 2929 2929 2929 19c9 af22 0520 8fcc9 aff5 d55f 7323 0b79 b020 f9d1 f1c9
std::cout << std::hex << std::showbase << a[16] << std::endl; の部分で要素数16を出力しているのですが、
testファイルのc3d9が格納されておらず、00が出力されます。
a[17]ではf2が出力されます。
どうも2行目以降の1バイト目が処理されずスルーされているようなのですが、原因がわかりません。
どなたかご教授よろしくお願いいたします。
環境
Windows10 WSL Ubuntu
コンパイラ:g++ 9.3.0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。