gpt4 book ai didi

java - 如何在 Java 代码中接收 Simulink 常量值?

转载 作者:行者123 更新时间:2023-11-30 02:51:00 25 4
gpt4 key购买 nike

我的 Simulink 模型中有一个使用“UDP Send” block 发送的常量值。有一个 Java Socket 程序可以监听特定端口上的任何输入值。现在,我在 Java 代码中收到的值与从 Simulink 模块发送的值不同。例如,如果我从 Simulink 模型发送值 1,则在 Java 代码中我会收到 1072693248。

我使用 ByteBuffer.wrap(...) 将字节数组转换为整数。我的Java代码有什么错误吗?

最佳答案

如果您采用代表 1.0 的 double 的 32 位并将它们视为整数,则得到数字 1072693248 = 1023 * 2^20(或使用 Java 表示法 1023 << 20)。要获取此值,如果数字以大端方式存储,则需要获取前 32 位;如果数字以小端方式存储,则需要获取最后 32 位。字节序方式。请参阅this question举个例子 - 我认为这是小端版本。

所以问题是由 Simulink 在您的 Java 代码需要整数时发送 double 值引起的。这很容易意外发生,因为除非您另外指定,否则 Simulink 和 MATLAB 通常将数字视为 double 。假设您确实想要发送 32 位整数,最简单的解决方法是更新 Constant 模块的设置。您可以从模块参数对话框的 Signal Attributes 选项卡中显式设置输出数据类型,或者将该设置保留为“Inherit from Constant Value”并将值本身从“1”更改为例如“int32(1)”。

关于java - 如何在 Java 代码中接收 Simulink 常量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38666534/

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