【问题标题】:How can I convert a char vector to a char array?如何将 char 向量转换为 char 数组?
【发布时间】:2017-03-05 16:43:45
【问题描述】:

我正在读取文件(图像)的字节,然后转换为 base64。

字节被写入一个称为缓冲区的字符向量中,因为我还没有找到将文件中的字节写入字符数组的工作示例

我是这样处理 char 向量的:

ifstream infile("image.png", ios_base::binary);

infile.seekg(0, ios_base::end);
size_t length = infile.tellg();
infile.seekg(0, ios_base::beg);

vector<char> buffer;
buffer.reserve(length);
copy(istreambuf_iterator<char>(infile),
    istreambuf_iterator<char>(),
    back_inserter(buffer)); infile.read(&buffer[0], length);

base64编码函数为:

int base64_encode(unsigned char *source, size_t sourcelen, char *target, size_t targetlen);

我需要将 base64 编码的文本发送到网站,以便它可以显示在例如页面上。

【问题讨论】:

  • 我不明白你为什么认为你需要“转换”任何东西。您是否只需将指向向量缓冲区的指针指向base64_encode?您是否考虑阅读 std::vector 的文档以了解它可以做什么?
  • 抱歉,有什么问题,有什么问题?
  • 如何将 char 向量转换为 char 数组与“我需要将 base64 编码的文本发送到网站”相关?另外,在文件的全部内容被std::copy()吞没之后,你打算通过那个看起来很奇怪的read()来完成什么????

标签: c++ arrays vector type-conversion


【解决方案1】:

在 C++ 中,向量是动态分配的数组。每当您调用.push_back() 方法时,都会重新分配数组,并在数组末尾附加新数据。如果您确实需要将数据从向量传输到常规数组,您可以使用 for 循环将数据分配给数组,如下所示:

for (int i = 0; i < vec.size() && i < arrLen; i++) {
    arr[i] = vec[i];
}

虽然考虑到向量只是动态分配的数组,但更好的方法是将向量的第一个元素的原始指针传递给函数。

foo(&vec[0]);

foo(vec.begin());

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2019-11-21
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多