如何将const std :: vector 转换为char
问题描述:
将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);
}
答
假设是char
一个typedef(有或没有signed
或unsigned
),那么你的代码是好的,但略超过必要的繁琐。 vector
使用的存储需要是连续的数组,因此获取第一个元素的地址将为您提供一个指向该数组的指针。任何种类的char
与任何其他类型的char
具有相同的布局和对齐方式,因此指针转换是有效的。
到send
的参数是const void*
,和(或多或少)任何指针可以隐式转换到这一点,所以没有必要投:
ret = send(_socket, &buffer[0], buffer.size(), 0);
但是,你应该检查(或以其他方式确保)在使用[]
之前buffer
不是空的。
什么问题? – 2012-07-17 07:36:01
将矢量(多个元素)转换为标量项目(一个元素)将会很困难,您的意思是:如何获取矢量内容的地址?但是你的代码看起来不错,你有什么问题吗? – harper 2012-07-17 07:37:02
'char'和'unsigned char'是布局和对齐兼容的,并且明确允许指针转换。你的代码是绝对没问题的(事实上它可以正确地启用你的用例)。 – 2012-07-17 07:39:55