c++ - 从字符串转换为 byte[] 并将结果添加到内存流中

标签 c++ ubuntu

我如何将一个字符串转换成一个字节[],然后他们将结果添加到一个流中。谢谢。我正在使用 C++ 代码,ubuntu。

编辑: 我有一个 std::string 作为字符串值。 我需要一种将 std::string 值作为输入并返回流值作为输出的方法。

最佳答案

只需调用 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;
}

关于c++ - 从字符串转换为 byte[] 并将结果添加到内存流中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138771/

相关文章:

ubuntu - 预置 PhpMyAdmin - 跳过多选,跳过密码

c# - 如何使用 Mono 查看 .Net/C# 中的 Unicode 规范化算法?

c++ - 为什么我得到 'missing template arguments before f'

c++ - 从 'std::string* {aka

c++ - “An access violation (Segmentation Fault) raised in your program.”

c++ - 有没有工具可以检测 Visual C++ 6.0 上的缓冲区溢出?

c++ - operator+ 没有返回完整的对象?

MySQL 服务器正在运行但正在获取 "Can' t Connect”

php - 使用 imap 访问电子邮件

c# - 使用 Java TCP 服务器连接到 Ubuntu,使用 C# TCP 套接字连接到 Windows 7