2016-11-10 37 views
2

は、私のようなQByteArrayを初期化することができます。QByteArrayの初期化

QByteArray m_data; 
m_data[0] = 0x0c; 
m_data[1] = 0x06; 
m_data[2] = 0x04; 
m_data[3] = 0x04; 
m_data[4] = 0x02; 
m_data[5] = 0x00; 

しかし、私はよりコンパクトな何かをしたい、のような:

error: could not convert '{12, 6, 4, 4, 2, 0}' from '<brace-enclosed initializer list>' to 'QByteArray' 
    QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 0x00}; 
                 ^
:残念ながら、この形式が許可されていない

QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 0x00}; 

私の夢に近い選択肢はありますか?

(ないC++ 11月14日/ 17は、この問題に役立ちます?)

+0

'0x00'バイトを格納する必要がありますか?おそらく 'QByteArray :: QByteArray(const char * str)'コンストラクタを使うことができますか? – wally

+0

はい、そこにすべてのバイトが必要です。 – KcFnMi

+3

'QByteArray m_data(" \ x0c \ x06 \ x04 \ x04 \ x02 "、6)' –

答えて

1

あなたがリストにあるどのように多くの要素テンプレートのフィギュアを出すことができます:

using myarr = char[]; 

template <size_t N> 
QByteArray make_QByteArray(const char(&a)[N]) { 
    return {a,N}; 
} 

その後でQByteArrayを作成:

auto m_data{make_QByteArray(myarr{0x0c, 0x06, 0x04, 0x04, 0x02, 0x00})}; 
0

私はそのような答えを探していましたが、宣言された変数を式に含めました。例えば:

char  v1 = 0x06, v2 = 0x04; 
QByteArray ba(std::begin<char>({0x0c, v1, v2, v2, 0x02, 0x00, '\x8b'}), 7); 

std::beginまたはこれが達成できたとしてもstd::initializer_list C++ 11の機能を使用する:ここで

char  v1 = 0x06, v2 = 0x04; 
QByteArray m_data; 

m_data[0] = 0x0c; m_data[1] = v1 ; m_data[2] = v2 ; 
m_data[3] = v2 ; m_data[4] = 0x02; m_data[5] = 0x00; 
//And a character higher than 0x7f 
m_data[6] = 0x8b; 

は、私が見つけた解決策です。