簡體   English   中英

如何投射矢量 <unsigned char> 到char *

[英]How to cast vector<unsigned char> to char*

我有這樣的緩沖區:

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 *。

reinterpret_cast<char*> (&buf[0]);

向量保證其元素占用連續的內存。 所以你尋找的“數據”實際上是第一個元素的地址(小心vector <bool> ,這個技巧會失敗)。 另外,為什么不是你的緩沖區vector<char>所以你不需要reinterpret_cast?

更新C ++ 11

reinterpret_cast<char*>(buf.data());
reinterpret_cast<char*>(buf.data());

嘗試

(char *)(&buf[0])

或者另一個更多的C ++演員。 但是也要告訴我們你用的是什么。 這可能是一個壞主意。

你不太可能想要將vector<unsigned char>unsigned char * ,但你可以得到一個像這樣的有效指針:

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

這個奇怪的表達式將為您提供指向由向量創建的內部分配數組的開頭的指針。 如果您完全修改了矢量,它可能不再有效。

冗余查找&*的原因是*實際上是v.begin()返回的迭代器上的operator * 返回對數組的第一個char的引用,然后您可以使用&獲取地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM