Я вижу, как 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 с соответствующими данными?