0

ファイルに 16 進数のデータ値があり、それらをバイト配列に格納したいと考えています。文字列ストリームを使用しようとしましたが、うまく動作しません。

ファイル内の私のデータは次の形式です

05 02 55 AD FF 0F F0 00 77 01 10 CD 00 BB AA 28
02 34 F1 D0 AD 18 84 3C 5A 21 22 43 78 CA BD FE ...

私はこのようなものを試しました

std::ifstream inFile("inFile.txt");
std::string line;
uint8_t data[512];

while (std::getline(inFile, line))
{
    std::istringstream iss(line);
    iss >> data;
}

助言がありますか?

4

1 に答える 1

3

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;
}

16 進数は として読み取られることに注意しunsigned intてください。結果は必要に応じて配列であるため、これは のみです。印刷時にも同じことが起こります。文字コードではなく数字として表示されるように、 に変換し直しました。int8_tcharifstreamtempuint8_tunsigned

これは一例であることに注意してください。コードでさらにエラー チェックを行う必要があります。

于 2013-05-16T09:21:57.000 に答える