Здравствуйте, господа форумчане. Имеется бинарный файл следующей структуры:
int32 n;
string text; в неизвестной кодировке, но есть алгоритм на C# для перевода text в читаемый человеком вид:
public static string decode(int n, byte[] text)
{
string result = "";
byte[] data = new byte[2];
for (int i = 0; i < text.Length; i += 2)
{
data = BitConverter.GetBytes((short)key);
// XOR decoding to receive Unicode character code
data[0] ^= text[i];
data[1] ^= text[i + 1];
result += BitConverter.ToChar(data, 0);
}
return result.TrimEnd(new char[] { '\0' });
}
, который я переписал под Qt:
// Class.decode(n, text.toLocal8Bit())
QString Class::decode(int n, QByteArray text)
{
QByteArray data;
QString result;
short a = n;
for (int i = 0; i < text.length(); i += 2)
{
data.fill(a, sizeof(a));
// XOR decoding to receive Unicode character code
data[0] = data[0] ^ text[i];
data[1] = data[1] ^ text[i + 1];
result.append(data.data());
}
return result.trimmed();
}
void Class::ReadText(QFile *file)
{
QByteArray data;
for(int i=0;i<60;i++) {
data = file->read(1);
if(data.data()!='\0')
text.append(data.data());
}
}
И мой результат формата n - text(первая строчка "Test", вторая строчка "Тест"):
Проблема с кодировкой налицо, но я не представляю что делать и надеюсь на вашу помощь...