0

unsigned char std::vector から char に変換する正しい方法は何でしょうか?

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

1 に答える 1

2

それが( または の有無にかかわらず)BYTEの typedef であると仮定すると、コードは問題ありませんが、必要以上に冗長になります。a が使用するストレージは連続した配列である必要があるため、最初の要素のアドレスを取得すると、その配列へのポインターが得られます。どの種類のも、他の種類の と同じレイアウトと位置合わせを持つため、ポインター変換は有効です。charsignedunsignedvectorcharchar

への引数sendは isconst void*であり、(多かれ少なかれ) 任意のポインターを暗黙的にそれに変換できるため、キャストする必要はありません。

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

bufferただし、 を使用する前に、 が空でないことを確認 (または確認) する必要があります[]

于 2012-07-17T07:48:06.773 に答える