代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

如何将vector<unsigned char>转换为char*

c++
  •  27
  • Richard Knop  · 技术社区  · 15 年前

    我有一个这样的缓冲区:

    vector<unsigned char> buf
    

    我怎样才能把它转换成char*?

    如果我这样做了:

    (char *)buf
    

    我得到这个错误:

    /home/richard/Desktop/richard/client/src/main.cc:102: error: invalid cast from type ‘std::vector<unsigned char, std::allocator<unsigned char> >’ to type ‘char*’
    

    对于那些想知道我为什么要这么做的人。我需要将缓冲区传递给此函数:

    n_sent = sendto(sk,(char *)buf,(int)size,0,(struct sockaddr*) &server,sizeof(server));
    

    它只接受char*。

    4 回复  |  直到 15 年前
        1
  •  58
  •   Armen Tsirunyan    11 年前
    reinterpret_cast<char*> (&buf[0]);
    

    向量保证其元素占用连续内存。所以你寻找的“数据”实际上是第一个元素的地址(注意 vector <bool> ,这个把戏会失败的)。还有,为什么你的缓冲区 vector<char> 所以你不需要重新解释演员?

    C++ 11的更新

    reinterpret_cast<char*>(buf.data());
    
        2
  •  7
  •   ronag    15 年前
    reinterpret_cast<char*>(buf.data());
    
        3
  •  4
  •   Chris Lutz    15 年前

    尝试

    (char *)(&buf[0])
    

    或者另一个,更多的C++演员。也告诉我们你用这个干什么。这可能是个坏主意。

        4
  •  3
  •   Ben Jackson    15 年前

    你不太可能 vector<unsigned char> unsigned char * ,但您可以获得如下有效指针:

    vector<unsigned char> v;
    unsigned char *p = &*v.begin();
    

    这个奇怪的表达式将给您指向 内部的 由向量创建的已分配数组。如果完全修改向量,则它可能不再有效。

    长得多余的原因 &* 是那个 * 是真的 operator * 由返回的迭代器 v.begin() . 返回对数组的第一个字符的引用,然后可以使用 & .