1

std::bitsetバイナリシフト操作を実行せずに、16 進数から aを構築する方法、std::stringまたはQStringその逆を行う方法はありますか? その方法は知っていますが、C++ストリームなどを使用してこれを行うことができるかどうか疑問に思っていました.

これまでの私のコードは次のとおりです(モデレーターの攻撃を回避しようとしています):

QString data("aabbccddeeff");
QByteArray temp = QByteArray::fromHex(data.simplified().toLatin1());
QBitArray bits(temp.count()*8); 
for(int i=0; i<temp.count(); ++i) {
    for(int b=0; b<8;b++) {
        bits.setBit( i*8+b, temp.at(i)&(1<<(7-b)) );
    }
}
4

4 に答える 4

1

16 進文字列を整数に変換し、そこからビットセットを作成できます。

#include <iostream>
#include <sstream>
#include <bitset>
#include <string>

using namespace std;

int main()
{
    string s = "0xA";
    stringstream ss;
    ss << hex << s;
    unsigned n;
    ss >> n;
    bitset<32> b(n);
    // outputs "00000000000000000000000000001010"
    cout << b.to_string() << endl;
}
于 2016-05-08T14:31:42.067 に答える
0

以下の Trevor の回答に基づいて、次のコードを作成しました。

std::vector<std::bitset<8ul> > Bytes2Bits(QByteArray bytes)
{
    std::vector<std::bitset<8ul> > v;
    for(int i = 0 ; i < bytes.size(); ++i)
    {
        QByteArray temp;
        temp.append(bytes.at(i));
        std::string s = temp.toHex().toStdString();
        std::stringstream ss;
        ss << s;
        int n;
        ss >> n;
        std::bitset<8ul> b(n);
        v.push_back(b);
    }
    return v;
}

同じ解決策を探している他の人に役立つことを願っています。

于 2016-05-08T16:03:53.730 に答える