Why g++ giver: "error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"

Why g++ giver: "error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"

我正在微控制器和计算机之间建立 UDP 连接。 我正在使用的框架是基于 c++ 的,并且具有发送具有以下原型的 UDP 数据包的功能:

bool UdpConnection::send(const char *data, int length)

int length 是指针包含的 字节数

但我正在使用 returns uint16_t 类型的函数进行一些输入读取。

我无法在这两个函数中直接更改任何内容。

然后我做了以下事情:

UdpConnection udp;
uint16_t dummy = 256;
udp.send(reinterpret_cast<char*>(dummy),2);

但我是个好奇的人,所以我尝试了以下方法:

UdpConnection udp;
uint16_t dummy = 256;
udp.send((char*)dummy,2);

当我编译最后一段代码时,我得到:

error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]

在我的分析中,两个片段都做同样的事情,为什么我在最后一个片段中出错,而在第一个片段中却没有?

编辑:

第一段代码可以编译,但在代码运行时会出现分段错误。所以这两个代码都不起作用。

编辑 2:

问题的有效且经过测试的解决方案,但不是原始问题的答案,是:

union Shifter {
    uint16_t b16;
    char b8[2];
} static shifter;

shifter.b16 = 256;
udp.send(shifter.b8,2);

此解决方案被广泛使用,但它不可移植,因为它依赖于 CPU 字节顺序,因此请先在您的应用程序中进行测试。

我认为这是正确的:

udp.send(reinterpret_cast<char*>(&dummy),2);

注意符号。否则,您将从地址 256 发送两个字节,这可能是随机的(最多)。这是微控制器,所以它可能不会崩溃。 第二个版本应该是:

udp.send((char*)&dummy,2);