我必须QByteArray使用不同的数据填充a .所以我正在使用QDataStream.
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
qint8 dataHex= 0x04;
qint8 dataChar = 'V';
stream << dataHex<< dataChar;
qDebug() << buffer.toHex(); // "0456" This is what I want
Run Code Online (Sandbox Code Playgroud)
但是,我还想将QByteArray附加到buffer.
QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);
qint8 dataHex= 0x04;
qint8 dataChar = 'V';
QByteArray moreData = QByteArray::fromHex("ff");
stream << dataHex<< dataChar << moreData.data(); // char * QByteArray::data ()
qDebug() << buffer.toHex(); // "045600000002ff00" I would like "0456ff"
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我想在运行时创建istream,QByteArray而不将物理文件保存在QByteArray.
我发现有很多方法可以进行相反的转换,即istream到QByteArray,但不是这个。
如何做到这一点?
我有一堆十六进制数字,但我不想这样做
QByteArray ba;
ba.append(0x01);
ba.append(0x02);
ba.append(0x7A);
...
Run Code Online (Sandbox Code Playgroud)
我可以一行吗?也许是QString操纵?
我通过串行通信发送消息QExtSerialPort,我需要在QByteArray中存储Hex命令,以便我可以使用qint64 write(const QByteArray &data)
我想从 QByteArray 播放音乐,这样我可以在很多情况下使用它从数据库检索声音或使用 Tcp 等通过网络传输它。
所以我使用这些代码行
QFile file("E:\\amr.mp3"); // sound dir
file.open(QIODevice::ReadOnly);
QByteArray arr = file.readAll(); // change it to QbyteArray
QBuffer buffer(&arr);
qDebug() << "Buffer error = " << buffer.errorString(); // i get error from here "unkow error"
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QMediaContent(),&buffer);
player->play();
qDebug() << "Player error = " << player->errorString(); // no error ""
Run Code Online (Sandbox Code Playgroud)
我在搜索时看到很多解决方案,其中之一是在 stackoverflow 上,解决方案是创建一个 Qbuffer,将数组传递给它并将其放入 setMedia 但它不起作用,所以我需要任何帮助来运行此代码或任何从 QByteArray 播放语音或音乐的其他方式
QStringList转换为最有效的方法是什么QByteArray?
我发现了很多类似转换的例子,但从来都不是我需要的,或者只是不必要地太复杂了。
该代码清理字符串输入,然后将其转换为QByteArray. 我正在为后一部分而苦苦挣扎。
void MainWindow::on_suicideButton_clicked()
{
QString input = ui->lineEdit->text();
try{
if(ui->lineEdit->text().contains("0x")||ui->lineEdit->text().contains(",")||ui->lineEdit->text().contains("-"))
{
input = input.replace("0x","");
if (input.contains(',')) input = input.replace(",", "");
// QString trim = input.trimmed();
// input = trim;//.split(',', ' ', '-');
QStringList inputArray = input.split('-');
QByteArray output = inputArray;
}
//printf("%s\n", input);
ui->lineEdit->setText(input);
}
catch (const std::bad_alloc &) {input = " ";}
}
Run Code Online (Sandbox Code Playgroud)
QStringList inputArray = input.split('-'); 很重要(或者至少我相信如此),因为我需要将字节分割成单独的块,以便对它们执行各种操作。
这是一个示例,以便您了解我想要执行什么样的操作:
char MainWindow::checkSum(QByteArray &b)
{
char val = 0x00;
char i;
foreach (i, …Run Code Online (Sandbox Code Playgroud) 这个是泡菜.我正在尝试将我的窗口/其他元素保存为json格式,以便我可以将多个数据存储在我的窗口/等的1个位置
我知道QByteArray有这些函数:std :: string QByteArray :: toStdString()const和QByteArray QByteArray :: fromStdString(const std :: string&str)
哪个应该允许我这样做,但到目前为止,我不能让它在Python中工作.关于我在这里找到的一些信息(C)> 正确的无损转换为std :: string和QByteArray的方法
我尝试过这样的事情:
print(self.saveGeometry())
bar = self.saveGeometry()
print(bytes(str(bar).encode()))
Run Code Online (Sandbox Code Playgroud)
将QByteArray转换为bytearray然后我可以保存为字符串,但我得到了
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 1: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
any1可以建议我如何使用原生QT5 5.4+函数将QByteArray保存到QByteArray.toStdString到json然后将json>加载到QByteArray.fromStdString>到几何或其他方法?
谢谢!
我有一些枚举,由以下方式的十六进制值系列表示:
enum someEnum
{
NameA = 0x2121,
NameB = 0x2223,
NameC = 0x2020
};
Run Code Online (Sandbox Code Playgroud)
我想以下列方式将其中一个枚举附加到QByteArray:
QByteArray anArray;
anArray.append(NameA);
Run Code Online (Sandbox Code Playgroud)
但这种方法会产生警告
implicit conversion from 'int' to 'char' changes value from 8481 to 33.
Run Code Online (Sandbox Code Playgroud)
事实上,即使我做了以下事情:
anArray.append(static_cast<char>(NameA));
Run Code Online (Sandbox Code Playgroud)
它只附加0x21(十进制33).
我也尝试过以下方法:
const char * t = reinterpret_cast<char*>(NameA);
anArray.append(t, sizeof(t));
Run Code Online (Sandbox Code Playgroud)
但这会导致分段错误.
我当然可以在不丢失任何价值或崩溃或任何其他问题的情况下执行以下操作:
anArray.append(0x21);
anArray.append(0x21);
Run Code Online (Sandbox Code Playgroud)
但我不想那样,我想直接附加枚举.你能建议一个正确的方法吗?
非常感谢.
我使用的是 Qt 5.15.2,我有以下代码:
QByteArray arybytData = mpsckIncoming->readAll();
bool blnHTTP = false;
if ( arybytData.startsWith("GET / HTTP/") == true ) {
//HTTP Request, probably from browser, jump to end of header
const QString cstrHeaderTerminator("\r\n\r\n");
int intHdrEnd;
if ( (intHdrEnd = arybytData.indexOf(cstrHeaderTerminator)) == -1 ) {
Run Code Online (Sandbox Code Playgroud)
使用的行QByteArray::indexOf()包含以下文本:
'indexOf' is deprecated: Use QString's toUtf8(), toLatin1() or toLocal8Bit()
Run Code Online (Sandbox Code Playgroud)
我不明白这一点,因为建议的函数都不像 的函数QByteArrray::indexOf()。
我应该忽略它吗?
我在用着:
Qt Creator 4.14.0
Based on Qt 5.15.2 (Clang 11.0 (Apple), 64 bit)
Built on Dec 17 2020 07:57:30 …Run Code Online (Sandbox Code Playgroud) 我想转换QVector<double>成QBytearray,我不知道如何做到这一点.我试过这个,但程序崩溃了:
QVector<double> vec;
QByteArray arr = QByteArray::fromRawData(reinterpret_cast<const char*>(vec),vec.size());
for(int i = 0; i< vec.size(); i++)
arr.append(reinterpret_cast<const char*>(vec.data(&numberOfData),sizeof(double));
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何正确地做到这一点?
从QByteArray开始,我想在我的QByteArray中搜索"\n"char并将所有字符从头开始加到"\n"并将它们保存在QString中; 之后,我将传递给下一个字节直到下一个"\n"并将它们保存到一个新的QString中
QByteArray MyArray= (all data from my previous process);
quint16 ByteArrayCount = MyArray.count(); // number of bytes composing MyArray
quint16 mycounter;
QString myString;
while (mycounter < ByteArrayCount)
{
if(MyArray[mycounter] != "\n")
myString.append(MyArray[mycounter]);
mycounter++;
}
Run Code Online (Sandbox Code Playgroud)
这将附加新行之前的所有字节; 我的问题是如何评估MyArray [counter],因为我无法在计数器增加时检查每个字节.
解?
qbytearray ×10
c++ ×9
qt ×9
hex ×2
istream ×1
json ×1
pyqt ×1
pyqt5 ×1
python ×1
qdatastream ×1
qmediaplayer ×1
qstring ×1
std ×1