我QByteArray和他有问题QString.
我正在读取文件并将其信息存储在一个文件中QByteArray.该文件是unicode,因此它包含以下内容:t\0 e\0 s\0 t\0 \0 \0
我试图将此值与我的指定值进行比较,但它失败了,因为在调试器中我看到它不是unicode字符串.
代码将解释一切:
QByteArray Data; //contains unicode string "t\0 e\0 s\0 t\0 \0 \0"
QString myValue = "test"; //value to compare.
if(Data.contains(myValue))
//do some stuff.
else
//do other stuff.
Run Code Online (Sandbox Code Playgroud)
在调试器中,它向我显示变量Data具有值"t\0 e\0 s\0 t\0 \0 \0"并myValue具有值"test".我该如何解决?
我创建了一个加密/解密程序,加密时我将加密的QByteArray存储在一个文本文件中.
在尝试解密时,我检索它然后将其放入解密方法,问题是我需要一种方法将其转换为QByteArray 而不更改格式,否则它将无法正确解密.我的意思是,如果文件给我一个1234的加密值,我将1234.toLatin1()它转换为QByteArray,它改变了值,解密不起作用.有什么建议?
我的代码:
QFile file(filename);
QString encrypted;
QString content;
if (file.open(QIODevice::ReadOnly)) {
QTextStream stream( &file );
content = stream.readAll();
}
encrypted = content.replace("\n", "");
qDebug() << encrypted; // Returns correct encrypted value
QByteArray a;
a += encrypted;
qDebug() << "2 " + a; // Returns different value than previous qDebug()
QByteArray decrypted = crypto.Decrypt(a, key);
return decrypted;
Run Code Online (Sandbox Code Playgroud) 我有一个QByteArray存储从GPS接收的数据,这是部分二进制和部分ASCII.我想知道调试提案知道收到了什么,所以我写的qDebug是这样的:
//QByteArray buffer;
//...
qDebug() << "GNSS msg (" << buffer.size() << "): " << buffer;
Run Code Online (Sandbox Code Playgroud)
我在控制台上收到这样的消息:
GNSS msg ( 1774 ): "ygnnsdgk...(many data)..PR085hlHJGOLH
(more data into a new line, which is OK because it is a new GNSS sentence and
probably has a \n at the end of each one) blablabla...
Run Code Online (Sandbox Code Playgroud)
但突然间我得到了一个新的打印迭代.数据尚未删除,已附加.所以新的消息大小例如3204,明显比之前的打印大.但它打印完全相同(但括号之间的新尺寸3204).没有打印新数据,只是与上一条消息相同:
GNSS msg ( 3204 ): "ygnnsdgk...(many data)..PR085hlHJGOLH
(more data into a new line, which is OK because it is a new GNSS sentence …Run Code Online (Sandbox Code Playgroud) 使用QWebChannel从QtWebKit迁移到QtWebEngine.
我有一个可调用的函数,它将QVariant对象发送到Javascript,它被视为JSON对象.因此,一个QString变成了string,一个QInt一个int,等等.
在没有QWebChannel的情况下使用QtWebKit,QByteArray被视为a Uint8ClampedArray,但现在直接转换为string使用UTF-8(我的QByteArray不是:())
我做错什么了吗 ?我该怎么办 ?
这是相关的代码部分:
//Qt Window class signal to javascript
void MyWindow::uplink(Response msg)
{
emit _nativeToJs(msg->toJson());
}
//Response class toJson() method
QVariantMap Response::toJson() const
{
QVariantMap map;
map["id"] = m_id; //qulonglong
map["src"] = QString(m_src);
map["dst"] = QString(m_dst);
map["status"] = m_status; //qint16
map["result"] = m_result; //QVariant, can be a map of string, arrays, etc
return map;
}
//Javascript
var foo;
new QWebChannel(qt.webChannelTransport, function(channel) {
//we connect …Run Code Online (Sandbox Code Playgroud) 它需要4个字节来表示整数.如何将inta 存储在一个QByteArray只需4个字节的位置?
QByteArray::number(..) 将整数转换为字符串,从而占用超过4个字节.QByteArray((const char*)&myInteger,sizeof(int)) 似乎也没有用.我试图从QImage创建QByteArray,但是虽然我尝试了很多varient,但我无法处理它.
我在做的是:
QImage img_enrll; // <--- There is an image coming from another function.
QByteArray arr((char*)img_enrll.bits(),img_enrll.byteCount()); // <-- convertion but I am not sure it is true or not.
funcCheck((unsigned char*)arr.data(), arr.size(), 0, &sam, 1, &n);
virtual Error funcCheck (const uint8_t src[],
size_t src_len,
size_t tout_ms,
IRawSample* dst[],
size_t dst_len,
size_t* dst_n )
Run Code Online (Sandbox Code Playgroud)
但是,错误代码返回无效数据.我认为将QImage转换为QByteArray是错误的.请你能帮我转换成QByteArray吗?
我有一个PySide2.QtCore.QByteArray对象叫做roleName我编码了一个 python 字符串:
propName = metaProp.name() // this is call of [const char *QMetaProperty::name() ](https://doc.qt.io/qt-5/qmetaproperty.html#name)
// encode the object
roleName = QByteArray(propName.encode())
print(roleName) // this gives b'myname'
// now I would like to get just "myname" without the "b"
roleString = str(roleName)
print(roleString) // this gives the same output as above
Run Code Online (Sandbox Code Playgroud)
如何取回解码后的字符串?
在我的程序中,我通过串行通信工作很多,因此QByteArray经常使用.
我想知道是否有一个更短的方法来初始化QByteArray特定字节比:
const char test_data[] = {
static_cast<char>(0xB1), static_cast<char>(0xB2),
0x5, static_cast<char>(0xFF),
static_cast<char>(0xEE), static_cast<char>(0xEE),
static_cast<char>(0x0)}; // Note QByteArray should be able to hold 0 byte
const QCanBusFrame frame = QCanBusFrame(0xA1, QByteArray(test_data));
Run Code Online (Sandbox Code Playgroud)
这static_cast<char>是必要的,因为否则C++ 11会出现关于缩小的错误,因为0x7F到0xFF的范围大于a char可能适合的范围 - 但是a char是QByteArray构造函数要求的.
这是使用的QByteArray构造函数:
QByteArray::QByteArray(const char *data, int size = -1)
当我们用这个文本"ali ata bak"创建一个文本文件时,我们使用这个文件作为程序的输入.代码正常运行.但是当我们在文本文件中输入"1111111111111111111111"这个文本时,Code没有运行预期.那有什么问题呢?
#include <QtCore/QCoreApplication>
#include <QBitArray>
#include <QByteRef>
#include <QFile>
#include <iostream>
#include <stdlib.h>
#include <QTextStream>
// Buffer Size #num of KB's
#define BUFFER_SIZE_KB 1
// Do not change !!
#define BUFFER_SIZE_BYTE BUFFER_SIZE_KB*1024
#define BUFFER_SIZE_BIT BUFFER_SIZE_BYTE*8
using namespace std;
QBitArray bytesToBits(QByteArray bytes) {
QBitArray bits(bytes.count()*8);
// Convert from QByteArray to QBitArray
for(int i=0; i<bytes.count(); ++i)
for(int b=0; b<8; ++b)
bits.setBit(i*8+b, bytes.at(i)&(1<<b));
return bits;
}
QByteArray bitsToBytes(QBitArray bits) {
QByteArray bytes;
bytes.resize(bits.count()/8);
// Convert from QBitArray to QByteArray
for(int b=0; …Run Code Online (Sandbox Code Playgroud) 我从串口读取的数据(在Qt中,使用QtSerialPort/QSerialPort)由换行符'\n'分隔并返回'\ r'字符,这是我打算查看它进行解析的方式.行长可能很长,但很容易从每行的格式中提取数据.
//signal/slot connection on readyRead() is as follows:
connect(serial, SIGNAL(readyRead()), this, SLOT(readData()));
Run Code Online (Sandbox Code Playgroud)
其中readData()定义为:
void MainWindow::readData()
{
//As mentioned below, which I will reiterate, I have already tried the addition of
// canReadLine():
if (serial->canReadLine()){
QByteArray data = serial->readLine();
//QByteArray allData = serial->readAll();
parseSerialBytes(data);
//console->putData(data);
//console->putData(alldata);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,与QIODevice :: readAll()相比,该QIODevice::readLine()函数非常慢,并且明显阻止数据以全频率接收
有人可以解释如何正确使用该readLine()功能,所以我不必循环readAll()进入QByteArray解析每一行?我使用"终端"Qt Widgets示例来创建此异步串行端口读取功能.
在此先感谢 - 这似乎是我在这里尚未看到的常见问题.
qbytearray ×10
c++ ×8
qt ×8
qstring ×2
c++11 ×1
integer ×1
javascript ×1
pyside2 ×1
python ×1
python-3.x ×1
qdebug ×1
qimage ×1
qt5 ×1
qt5.6 ×1
qtcore ×1
qtgui ×1
qtserialport ×1
qtwebengine ×1
string ×1