gpt4 book ai didi

c++ - 从 void* 转换为字符串 libwebsocket

转载 作者:行者123 更新时间:2023-11-28 00:40:31 25 4
gpt4 key购买 nike

我有一个用 libwebsockets 构建的小型 websocket 服务器,我需要接收一个 string ,问题是接收到的数据是 *void,但我无法将其转换为 string 。

static int my_protocol_callback(struct libwebsocket_context *context,
struct libwebsocket *wsi,
enum libwebsocket_callback_reasons reason,
void *user, void *in, size_t len)
{
int n, m;
unsigned char buf[LWS_SEND_BUFFER_PRE_PADDING + 512 +
LWS_SEND_BUFFER_POST_PADDING];
unsigned char *p = &buf[LWS_SEND_BUFFER_PRE_PADDING];


switch (reason) {

case LWS_CALLBACK_ESTABLISHED:
printf("New Connection\n");
break;

case LWS_CALLBACK_SERVER_WRITEABLE:
break;

case LWS_CALLBACK_RECEIVE:
webcmd = static_cast<std::string*>(in);
break;

case LWS_CALLBACK_FILTER_PROTOCOL_CONNECTION:
break;

default:
break;
}
return 0;
}

LWS CALLBACK RECEIVE下case,数据为*in , 我用 static_cast<std::string*>(in); 类型转换了它, 存储在 webcmd 字符串中。

问题是结果是一个字符指针,而我需要一个真正的字符,因为接下来我需要拆分字符串。

你怎么看?

编辑:解决了问题。

case LWS_CALLBACK_RECEIVE:

        tmpcmd = reinterpret_cast <char*>(in);
strcpy(webcmd , tmpcmd );

webcmd 是一个字符数组而 tmpcmd 是一个字符指针

谢谢大家:D

最佳答案

您不能只是static_cast 到您喜欢的任何内容并希望它能正常工作。不幸的是,您可以在没有警告的情况下将 void* 转换为您喜欢的任何内容。

static_cast,如 reinterpret_cast 只是在编译时更改类型,而不检查指针指向的内容是否实际代表您正在转换的类型到。

在这种情况下,std::string 是具有多个成员变量和内存表示的复杂类型。除非你传入完全相同的类型,否则你将得到灾难性的结果。

传递实际类型比传递 void* 要好得多,但我不知道你正在做的事情是否可行。

如果您真的需要一个字符串,那么您需要使用 std::string 的构造函数之一。

像这样:

case LWS_CALLBACK_RECEIVE:
std::string command(static_cast<char*>(in));
webcmd = command; //I don't know what webcmd is.
break;

关于c++ - 从 void* 转换为字符串 libwebsocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19136516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com