C++ 如何为winsock的send()函数构造const char*缓冲区

C++ 如何为winsock的send()函数构造const char*缓冲区,c++,networking,hook,winsock,winsock2,C++,Networking,Hook,Winsock,Winsock2,我挂接了发送函数,但从服务器接收到错误。服务器说我正在发送一个无效的数据包 为send函数构造const char*缓冲区的正确方法是什么 我想从字符串构造一个缓冲区。字符串包含内存中的确切十六进制代码 我的发送挂钩功能 int WINAPI sendHook(SOCKET s, const char *buf, int len, int flags) { string packet = "3904050080841E00"; return pSend(s, packet.c_

我挂接了发送函数,但从服务器接收到错误。服务器说我正在发送一个无效的数据包

为send函数构造const char*缓冲区的正确方法是什么

我想从字符串构造一个缓冲区。字符串包含内存中的确切十六进制代码

我的发送挂钩功能

int WINAPI sendHook(SOCKET s, const char *buf, int len, int flags) {

    string packet = "3904050080841E00";
    return pSend(s, packet.c_str(), packet.length(), flags);
}
简单

const char[] packet = {0x39, 0x04, 0x05, 0x00, 0x80, 0x84, 0x1E, 0x00};
return pSend(s, packet, sizeof packet, flags);

是否应该传递的是
packet.length()
而不是
len
?字符串包含表示为ASCII字符的十六进制代码。这就是你要送的吗?我对此有点怀疑。我会假设“39”意味着你应该发送一个39,而不是你应该发送一个
3
字符,后跟一个
9
字符。如果这是真的,那么字符串不包含应该发送的内容。最有可能的是,你应该发送一个39、4、5、0、80、84、1E,然后再发送一个0。不是字符串“3904050080841E00”。(除其他外,它的长度是原来的两倍。)谢谢助教们指出这一点。我已经更新了代码。你的问题仍然存在吗?这真的取决于十六进制是从哪里来的。通常,十六进制用于人机界面。你为什么在内部使用它?如果必须的话,您当然可以编写代码将十六进制转换为二进制。EJP,它现在可以工作了。非常感谢。如何从字符串生成这种数组缓冲区?上面给出的字符串。只需将它作为十六进制一次解析两个字节,但为什么呢?如果它是一个字符串文字,它是常量,那么为什么不直接像上面那样对它进行编码呢?为什么是字符串?我在这个例子中只使用了一个常量字符串。但我的程序在我的应用程序中使用了动态字符串。因此,我必须找到一种将字符串数据包转换为字符数组缓冲区的方法。