mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2025-12-31 20:58:07 -06:00
committed by
GitHub
parent
b27e839405
commit
160af4feef
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2023 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2018 Mike Tzou (Chocobo1)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -68,3 +69,45 @@ const QByteArray Utils::ByteArray::midView(const QByteArray &in, const int pos,
|
||||
: len;
|
||||
return QByteArray::fromRawData(in.constData() + pos, validLen);
|
||||
}
|
||||
|
||||
QByteArray Utils::ByteArray::toBase32(const QByteArray &in)
|
||||
{
|
||||
const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
|
||||
const char padchar = '=';
|
||||
|
||||
const qsizetype inSize = in.size();
|
||||
|
||||
auto tmp = QByteArray((inSize + 4) / 5 * 8, Qt::Uninitialized);
|
||||
qsizetype inIndex = 0;
|
||||
char *out = tmp.data();
|
||||
while (inIndex < inSize)
|
||||
{
|
||||
// encode 5 bytes at a time
|
||||
qsizetype inPadLen = 5;
|
||||
int64_t chunk = 0;
|
||||
while (inPadLen > 0)
|
||||
{
|
||||
chunk |= static_cast<int64_t>(static_cast<uchar>(in.data()[inIndex++])) << (--inPadLen * 8);
|
||||
if (inIndex == inSize)
|
||||
break;
|
||||
}
|
||||
|
||||
const int outCharCounts[] = {8, 7, 5, 4, 2};
|
||||
for (int i = 7; i >= 0; --i)
|
||||
{
|
||||
if (i >= (8 - outCharCounts[inPadLen]))
|
||||
{
|
||||
const int shift = (i * 5);
|
||||
const int64_t mask = static_cast<int64_t>(0x1f) << shift;
|
||||
const int charIndex = (chunk & mask) >> shift;
|
||||
*out++ = alphabet[charIndex];
|
||||
}
|
||||
else
|
||||
{
|
||||
*out++ = padchar;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent.
|
||||
* Copyright (C) 2023 Vladimir Golovnev <glassez@yandex.ru>
|
||||
* Copyright (C) 2018 Mike Tzou (Chocobo1)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
@@ -41,4 +42,6 @@ namespace Utils::ByteArray
|
||||
// Mimic QByteArray::mid(pos, len) but instead of returning a full-copy,
|
||||
// we only return a partial view
|
||||
const QByteArray midView(const QByteArray &in, int pos, int len = -1);
|
||||
|
||||
QByteArray toBase32(const QByteArray &in);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user