преобразовать из строки в byte [] и добавить результат в поток памяти - PullRequest
0 голосов
/ 26 мая 2011

как я могу преобразовать строку в байт [] и добавить результат, используя в потоке. СПАСИБО. Я работаю в коде C ++, Ubuntu.

EDIT: У меня есть std :: string в качестве строкового значения. Мне нужен метод, который принимает в качестве ввода значение std :: string и возвращает в качестве вывода значение потока.

Ответы [ 5 ]

1 голос
/ 26 мая 2011

Вы можете получить указатель на строковый буфер, просто вызвав std::string.c_str(). Это вернет const char* (где char - int8_t), которое вы можете эффективно использовать как byte[]. Имейте в виду, что возвращаемый указатель указывает на память, управляемую строковым объектом, поэтому, если вы измените что-либо в исходном строковом классе, вы лишите законной силы указатель. Кроме того, так как это указатель на const char, вы не должны изменять какие-либо значения в буфере. Поэтому, если вам нужно больше постоянной памяти, или вам нужен буфер, который вы можете изменить, лучшим способом для достижения вашей цели было бы сделать (используя gcc, что не должно быть проблемой, так как вы работаете в Ubuntu):

std::string my_string;
char string_array[my_string.length() + 1];
strcpy(string_array, my_string.c_str());

Теперь используйте string_array в качестве буфера памяти.

Если вам нужно вернуть буфер из функции, вам нужно выделить буфер в куче и вернуть указатель. Это также означает, что вам придется вызывать delete [] и для указателя после того, как вы покончили с ним, иначе вы столкнетесь с утечкой памяти. Таким образом, вы можете сделать следующее:

#include <string>
#include <cstring>

char* return_buffer(const std::string& string)
{
   char* return_string = new char[string.length() + 1];
   strcpy(return_string, string.c_str());

   return return_string;
}

//now use in code
int main()
{
    std::string some_string = "Stuff";
    char* buffer = return_buffer(some_string);

    //...do something with buffer

    //...after you're done with the buffer to prevent memory leak
    delete [] buffer;

    return 0;
}
0 голосов
/ 26 мая 2011
std::vector<char> bytes(myString.begin(), myString.end());

- простое решение

0 голосов
/ 26 мая 2011

Вы можете использовать c_str () в вашей строке для доступа к содержимому строки как const char *, что должно быть тем, что вам нужно. Возможно, тогда вам понадобится приведение, но все должно быть в порядке, поскольку символ (как правило, и на вашей платформе) 1 байт.

0 голосов
/ 26 мая 2011

Непонятно, что вы подразумеваете под byte: char или unsigned char?И я тоже не знаком с твоим memorystream.Но при условии, что у вас есть std:;string, и вы хотите добавить его к std::vector<unsigned char>, вы можете использовать std::copy напрямую:

std::copy( input.begin(), input.end(), std::back_inserter( out ) );

Если требуется какой-либо перевод, std::transformможет быть пригодным для использования, если это один char к одному byte.

0 голосов
/ 26 мая 2011

Как указал Space_C0wb0y, C ++ не имеет тип данных byte.У C # есть хотя.Это тот язык, который вы хотите?

Если вы уверены, что имеете дело с C ++, тогда, я думаю, вы бы использовали тип данных char размером один байт.Кроме того, чтобы преобразовать std::string в char* (указатель на набор char значений, оканчивающихся на \0), необходимо вызвать функцию c_str() для переменной.

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