在c ++中从void *转换为int

时间:2017-10-10 08:24:57

标签: c++ int mqtt void-pointers

我在mqtt应用程序中工作,当我从mqtt代理接收有效负载的信息并尝试将其从void *即message-> payload转换为int

signed int var_1=*((int*) message->payload);

而不是将其转换为将其转换为另一个的数字,看到这个我使用以下代码:

printf("Message:%s\n",message->payload);
printf("Message:%i\n",var_1);

显示:

Message:-58
Message:3683629

我还认为有效载荷是一个字符串,但是如果我使用stoi函数它会给我错误:

can not convert from ´void*´ to ´int´ with stoi function.

3 个答案:

答案 0 :(得分:1)

在C ++中,您无法自动从const void*转换为const char*

您需要一个明确的静态强制转换:

int i=atoi(static_cast<const char*>(message->payload));

注意我使用了atoi()这是一个C库函数(#include <cstdlib>)。

将其转换为std::string只需将其解析为int即可。

所有这些都假设你认为有效载荷是c风格字符串中的字符编码十进制整数是正确的。

答案 1 :(得分:1)

  

[我]尝试将其从void*转换为int

行。第一步是弄清楚正在运输的物体的类型。正如MQTT的文档所说:

  

MQTT与数据无关,它完全取决于用例如何构建有效负载。如果它想发送,完全取决于发件人......

  

as

signed int var_1=*((int*) message->payload);

现在,如果指针指向int类型的对象,这是正确的。这是一个合理的猜测,但你不应该猜测 - 除了作为最后的手段 - 对象的类型。您应该通过阅读文档或代码来研究发送者,以找出指向对象的类型。

  

而不是将其转换为将其转换为另一个的数字

所以,你或者一直在期待错误的价值,或者你猜错了类型。解决方案是停止猜测并找出正确的类型。

  

我还认为有效载荷是一个字符串,但是如果我使用stoi函数它会给我错误:

can not convert from ´void*´ to ´int´ with stoi function.

错误似乎非常清楚。 stoi的论点是const std::string& str,而不是void*void*无法隐式转换为std::string。具体如何进行此类转换取决于对象void*指向的对象类型(有时,包含的数据类型)。

答案 2 :(得分:0)

我不太明白message-&gt;有效负载是否包含数字本身或字符串表示。 如果message-&gt;有效负载包含存储该数字的内存位置,则var_1保存。 因此,您不能指望这些值是相同的。 关于stoi - 它接收一个包含数字的字符串,但是作为字符串。例如 -

std::string num = "1234";
int convertedNumber = stoi(num);