MCPcopy Create free account
hub / github.com/clementgallet/libTAS / variantToByteArray

Function variantToByteArray

src/external/qhexview/src/model/qhexutils.cpp:197–289  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

195}
196
197QByteArray variantToByteArray(QVariant value, QHexFindMode mode,
198 unsigned int options) {
199 QByteArray v;
200
201 switch(mode) {
202 case QHexFindMode::Text:
203 if(QHEXVIEW_VARIANT_EQ(value, String))
204 v = value.toString().toUtf8();
205 else if(QHEXVIEW_VARIANT_EQ(value, ByteArray))
206 v = value.toByteArray();
207 break;
208
209 case QHexFindMode::Hex: {
210 if(QHEXVIEW_VARIANT_EQ(value, String)) {
211 qint64 len = 0;
212 auto s = value.toString();
213 if(!PatternUtils::check(s, len))
214 return {};
215
216 bool ok = true;
217
218#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
219 for(auto i = 0; ok && i < s.size(); i += 2)
220 v.push_back(static_cast<char>(
221 QStringView{s}.mid(i, 2).toUInt(&ok, 16)));
222#else
223 for(auto i = 0; ok && i < s.size(); i += 2)
224 v.push_back(
225 static_cast<char>(s.midRef(i, 2).toUInt(&ok, 16)));
226#endif
227
228 if(!ok)
229 return {};
230 }
231 else if(QHEXVIEW_VARIANT_EQ(value, ByteArray))
232 v = value.toByteArray();
233 break;
234 }
235
236 case QHexFindMode::Int: {
237 bool ok = false;
238 uint val = value.toUInt(&ok);
239 if(!ok)
240 return QByteArray{};
241
242 QDataStream ds(&v, QIODevice::WriteOnly);
243
244 if(options & QHexFindOptions::BigEndian) {
245 if(options & QHexFindOptions::Int8)
246 ds << qToBigEndian<quint8>(val);
247 else if(options & QHexFindOptions::Int16)
248 ds << qToBigEndian<quint16>(val);
249 else if(options & QHexFindOptions::Int32)
250 ds << qToBigEndian<quint32>(val);
251 else if(options & QHexFindOptions::Int64)
252 ds << qToBigEndian<quint64>(val);
253 else
254 return variantToByteArray(value, mode,

Callers 2

findFunction · 0.85
replaceFunction · 0.85

Calls 3

checkFunction · 0.85
countBitsFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected