Android — Как преобразовать массив зашифрованных символов в String16 в Stack Overflow

Мне нужно закодировать входную строку типа String16. Для этого я сначала преобразовываю эту строку в байтовый массив ASCII типа uint8_t и передаю этот входной буфер функции шифрования, которая шифрует входной буфер и генерирует зашифрованный выходной буфер также типа uint8_t. , Теперь мне нужно преобразовать этот выходной буфер обратно в String16 и передать его на некоторый интерфейс связывателя.

Как и ожидалось, зашифрованный выходной буфер может содержать действительные NUL-символы, оканчивающиеся NUL (\ 0). Сначала я преобразую зашифрованный байтовый массив в тип std :: string, а затем в конечном итоге преобразую эту строку в тип String16, используя String16 finalString = String16 (outputString.c_str) ()); Но когда я пытаюсь вычислить размер окончательной строки с помощью finalString.size (), я получаю размер 1 по сравнению с размером выходного буфера.

Это может произойти, потому что в зашифрованном буфере сам второй элемент будет \ 0, и, следовательно, строка завершается.

Нужно ли использовать функции, которые конвертируют ASCII / UTF-8 в UTF16? Вот фрагмент кода

#include <iostream>
#include <cstring>
#include <utils/String16.h>

using std::string;
using android::String16;
using android::String8;

Status MyFunc(const ::android::String16& msg, ::android::String16* _aidl_return) override
{
uint8_t input_buffer[msg.size()];
for (int i = 0; i != msg.size(); i++)
{
input_buffer[i] = msg[i];
printf("%x \n", input_buffer[i]);
}
uint32_t ver_length = 8;
uint32_t input_content_length = sizeof(input_buffer);
uint32_t output_buf_length = input_content_length + ver_length;
uint8_t *output_buf = (uint8_t *)calloc(output_buf_length, sizeof(uint8_t));
encrypt_funct(&input_buffer[0], input_content_length, output_buf, &output_buf_length);
std::string temp;
for (int i = 0; i < output_buf_length; i++)
temp.push_back((char)output_buf[i]);
printf("Length of string temp is %d\n", temp.length());//I get correct length
String16 finalString = String16(temp.c_str());
printf("Length of finalString is %d\n", finalString.size());//I get length as 1
return Status::ok();
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector