通过winsock2发送uchar *

时间:2011-12-08 16:29:47

标签: c++ winsock

我有一个需要发送的uchar缓冲区。它无法转换为char。

我有一个示例项目:

send(SOCKET s, void *buf, size_t length) { return send(s, buf, length, 0);

我的尝试是:

err = send( ConnectSocket, (void*)buf, (int)strlen(sendbuf), 0 );

我知道唯一不同的是VS(2008)的版本。

该行不会在我的2010项目中编译。错误是无法将参数2 void *转换为const char *

2 个答案:

答案 0 :(得分:1)

试试这个:

err = send( ConnectSocket, (char*)buf, (int)strlen(sendbuf), 0 );

答案 1 :(得分:1)

由于send需要const char*而不只是char*,因此您不能只传递普通void*,因为C ++不支持隐式转换为/来自{{} {1}}。因此,您必须明确将其转换为void*char*

const char*

请记住,转换指针并不会神奇地改变缓冲区中数据的签名,因为send不关心任何签名,只是复制原始数据。

但至于为什么它与VS2008一起使用我不知道,因为C ++没有通过标准隐式地转换为err = send( ConnectSocket, (const char*)buf, (int)strlen(sendbuf), 0 ); 。也许void*的定义不同(我怀疑)或规则只是松懈(非标准符合)。或者也许你把它编译为C,然后通过标准来隐式地转换为send