2012-07-17 145 views
-1

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

什么问题? – 2012-07-17 07:36:01

+1

将矢量(多个元素)转换为标量项目(一个元素)将会很困难,您的意思是:如何获取矢量内容的地址?但是你的代码看起来不错,你有什么问题吗? – harper 2012-07-17 07:37:02

+1

'char'和'unsigned char'是布局和对齐兼容的,并且明确允许指针转换。你的代码是绝对没问题的(事实上它可以正确地启用你的用例)。 – 2012-07-17 07:39:55

回答

1

假设​​是char一个typedef(有或没有signedunsigned),那么你的代码是好的,但略超过必要的繁琐。 vector使用的存储需要是连续的数组,因此获取第一个元素的地址将为您提供一个指向该数组的指针。任何种类的char与任何其他类型的char具有相同的布局和对齐方式,因此指针转换是有效的。

send的参数是const void*,和(或多或少)任何指针可以隐式转换到这一点,所以没有必要投:

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

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

相关问题