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

Ric*_*nop 30 c++

我有这样的缓冲区:

vector<unsigned char> buf
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为char*?

如果我做:

(char *)buf
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

/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*’
Run Code Online (Sandbox Code Playgroud)

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

n_sent = sendto(sk,(char *)buf,(int)size,0,(struct sockaddr*) &server,sizeof(server));
Run Code Online (Sandbox Code Playgroud)

它只接受char*.

Arm*_*yan 58

reinterpret_cast<char*> (&buf[0]);
Run Code Online (Sandbox Code Playgroud)

向量保证其元素占用连续的内存.所以你寻找的"数据"实际上是第一个元素的地址(要注意vector <bool>,这个技巧会失败).另外,为什么不是你的缓冲区,vector<char>所以你不需要reinterpret_cast?

更新C++ 11

reinterpret_cast<char*>(buf.data());
Run Code Online (Sandbox Code Playgroud)

  • +1:我可以补充一点,reinterpret_cast仅用于`unsigned char`->`char`转换的目的,如果你不需要,你可以把它留下来. (2认同)

ron*_*nag 7

reinterpret_cast<char*>(buf.data());
Run Code Online (Sandbox Code Playgroud)