如何将常量标准::矢量<无符号字符>转换为字符



从无符号字符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);
}

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

send的参数是const void*,并且(或多或少(任何指针都可以隐式转换为该参数,因此无需强制转换:

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

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

最新更新