QByteArray из шестнадцатеричных буквальных символов Юникода - PullRequest
0 голосов
/ 10 июля 2020

Я вижу, как QByteArray преобразовывать в символ Ascii и обратно Я вижу, как преобразовать QString в utf-8 с помощью QString :: toUtf8 ()

Однако я не вижу, как инициализировать QByteArray с шестнадцатеричными литералами, содержащими символы Юникода. Символы Юникода слишком велики, чтобы поместиться в char. Однако они впишутся в беззнаковый символ.

Если я запустил следующий код:

QString test = "¢";
QByteArray utf8bytes = test.toUtf8();

Мой отладчик говорит:

utf8bytes = { (char)-62 '\302', (char)-94 '\242' }

Что бы это ни значило ...

То, что я в конечном итоге хочу достичь sh, - это иметь возможность предоставлять тестовые данные в следующем коде модульного теста:

void stomp_frame_tests::test_nonAsciiCharactersInHeaderKey()
{
    /* Frame we are testing with:
    SEND
    Bad¢Character:Erroneus
    destination:/queue/a
    content-type:text/json;charset=utf-8
    content-length:22

    This is a test message
    */

    const char data[]   = {0x53, 0x45, 0x4e, 0x44, 0x0a, 0x42, 0x61, 0x64, 0xc2, 0xa2, 0x43, 0x68, 0x61, 0x72, 0x61,
                          0x63, 0x74, 0x65, 0x72, 0x3a, 0x45, 0x72, 0x72, 0x6f, 0x6e, 0x65, 0x75, 0x73, 0x0a, 0x64,
                          0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x2f, 0x71, 0x75, 0x65,
                          0x75, 0x65, 0x2f, 0x61, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x74, 0x79,
                          0x70, 0x65, 0x3a, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3b, 0x63, 0x68,
                          0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x0a, 0x63, 0x6f, 0x6e,
                          0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x3a, 0x32, 0x32, 0x0a,
                          0x0a, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x61, 0x20, 0x74, 0x65, 0x73, 0x74,
                          0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x00};
    auto testData = QByteArray::fromRawData(data, sizeof(data));
}

Конечно, это не удается, потому что 0xc2 и 0xa2 слишком большой, чтобы поместиться в чугун. Как бы вы go об инициализации QByteArray с соответствующими данными?

1 Ответ

0 голосов
/ 10 июля 2020

Возможно, вы ищете QByteArrayLiteral:

auto byteArray = QByteArrayLiteral("\x01\x02\x03\x04\x05");

QByteArrayLiteral Documentation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...