如何将const std :: vector <unsigned char =“”>转换为char </unsigned>

时间:2012-07-17 07:33:29

标签: c++

将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);
}

1 个答案:

答案 0 :(得分:1)

假设BYTEchar的typedef(有或没有signedunsigned),那么您的代码很好,但比必要的更冗长。 vector使用的存储必须是一个连续的数组,因此获取第一个元素的地址会为您提供指向该数组的指针。任何类型的char都具有与任何其他char相同的布局和对齐方式,因此指针转换有效。

send的参数是const void*,并且(或多或少)任何指针都可以隐式转换为,所以不需要强制转换:

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

但是,在使用buffer之前,您应该检查(或以其他方式确保)[]不为空。