2012-07-17 148 views
-1

將unsigned char std :: vector轉換爲char的正確方法是什麼?如何將const std :: vector <unsigned char>轉換爲char

void SendSocket(const std::vector<BYTE> &buffer) 
{ 
    int ret; 
    const BYTE* bufferPtr = &buffer[0]; 
    ret = send(_socket, (const char*)bufferPtr, buffer.size(), 0); 
} 
+7

什麼問題? – 2012-07-17 07:36:01

+1

將矢量(多個元素)轉換爲標量項目(一個元素)將會很困難,您的意思是:如何獲取矢量內容的地址?但是你的代碼看起來不錯,你有什麼問題嗎? – harper 2012-07-17 07:37:02

+1

'char'和'unsigned char'是佈局和對齊兼容的,並且明確允許指針轉換。你的代碼是絕對沒問題的(事實上它可以正確地啓用你的用例)。 – 2012-07-17 07:39:55

回答

1

假設​​是char一個typedef(有或沒有signedunsigned),那麼你的代碼是好的,但略超過必要的繁瑣。 vector使用的存儲需要是連續的數組,因此獲取第一個元素的地址將爲您提供一個指向該數組的指針。任何種類的char與任何其他類型的char具有相同的佈局和對齊方式,因此指針轉換是有效的。

send的參數是const void*,和(或多或少)任何指針可以隱式轉換到這一點,所以沒有必要投:

ret = send(_socket, &buffer[0], buffer.size(), 0); 

但是,你應該檢查(或以其他方式確保)在使用[]之前buffer不是空的。

相關問題