如何正确实现QByteArray与QString互转以适配SQLite存储?
解决方案:二进制转文本用Base64/Hex编码
加密后的QByteArray是二进制数据,包含大量非标准文本编码的字节(比如你示例里的\xF7、\xFE),直接用UTF-8或默认字符串构造函数转换会因为编码兼容问题丢失原始数据,导致无法解密。正确的做法是用专门的二进制转文本编码方案:
推荐方案一:Base64编码(最常用)
Base64会把二进制数据转换成仅包含可打印字符的字符串,完全保留原始数据:
QByteArray转QString:
QByteArray encodedText = ...; // 加密后的二进制数据 QString storedStr = encodedText.toBase64();
QString转回QByteArray(用于解密):
QByteArray restoredBytes = QByteArray::fromBase64(storedStr.toUtf8());
方案二:Hex编码(十六进制文本)
把每个字节转换成两位十六进制字符,同样能完整保留数据:
- 转
QString:
QString storedStr = encodedText.toHex();
- 转回
QByteArray:
QByteArray restoredBytes = QByteArray::fromHex(storedStr.toUtf8());
这两种方式转换后,字符串可以安全存入SQLite,读取转回QByteArray后和加密原始数据完全一致,能正常解密。
内容的提问来源于stack exchange,提问作者Javad_R
相关产品推荐
相关产品推荐

