QByteArray 初始化
QByteArray initialization
我可以像这样初始化一个 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;
但我想要更紧凑的东西,例如:
QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 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};
^
还有其他选择吗(更接近我的梦想)?
(C++11/14/17 对这个问题有帮助吗?)
您可以让模板计算出列表中有多少元素:
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})};
我一直在寻找这样的答案,但是在表达式中包含声明的变量;例如:
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;
这是我找到的解决方案:
char v1 = 0x06, v2 = 0x04;
QByteArray ba(std::begin<char>({0x0c, v1, v2, v2, 0x02, 0x00, '\x8b'}), 7);
使用 std::begin or even std::initializer_list C++11 特性可以实现。
我正在使用:
QByteArray data(QByteArray::fromRawData("\x8B\x55\x0C\x83\xFA\x02\x75", 7));
我可以像这样初始化一个 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;
但我想要更紧凑的东西,例如:
QByteArray m_data{0x0c, 0x06, 0x04, 0x04, 0x02, 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};
^
还有其他选择吗(更接近我的梦想)?
(C++11/14/17 对这个问题有帮助吗?)
您可以让模板计算出列表中有多少元素:
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})};
我一直在寻找这样的答案,但是在表达式中包含声明的变量;例如:
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;
这是我找到的解决方案:
char v1 = 0x06, v2 = 0x04;
QByteArray ba(std::begin<char>({0x0c, v1, v2, v2, 0x02, 0x00, '\x8b'}), 7);
使用 std::begin or even std::initializer_list C++11 特性可以实现。
我正在使用:
QByteArray data(QByteArray::fromRawData("\x8B\x55\x0C\x83\xFA\x02\x75", 7));