将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);
}
答案 0 :(得分:1)
假设BYTE
是char
的typedef(有或没有signed
或unsigned
),那么您的代码很好,但比必要的更冗长。 vector
使用的存储必须是一个连续的数组,因此获取第一个元素的地址会为您提供指向该数组的指针。任何类型的char
都具有与任何其他char
相同的布局和对齐方式,因此指针转换有效。
send
的参数是const void*
,并且(或多或少)任何指针都可以隐式转换为,所以不需要强制转换:
ret = send(_socket, &buffer[0], buffer.size(), 0);
但是,在使用buffer
之前,您应该检查(或以其他方式确保)[]
不为空。