我使用" UDP Send"发送的Simulink模型中的常量值。块。有一个Java Socket程序可以在特定端口上侦听任何输入值。现在,我在Java代码中收到的值与从Simulink模块发送的值不同。例如,如果我从Simulink模型发送值1,则在Java代码中我收到1072693248.
我使用ByteBuffer.wrap(...)将字节数组转换为整数。我在Java代码中出错了吗?
答案 0 :(得分:2)
如果你取32的双倍代表1.0并将它们视为整数,则得到数字1072693248 = 1023 * 2 ^ 20(或使用Java表示法的1023 <&lt; 20)。要获得此值,如果数字以big-endian方式存储,则需要取第一个 32位;如果存储在一小部分中,则需要最后 32位。 endian方式。请参阅this question以获取此示例 - 我认为这是小端版本。
因此问题是由于Simulink在Java代码需要整数时发送一个double。这很容易发生,因为Simulink和MATLAB一般将数字视为双精度,除非你另有说明。假设您确实要发送32位整数,最简单的解决方法是更新Constant块的设置。您可以从块参数对话框的“信号属性”选项卡中显式设置输出数据类型,或将该设置保留为“从常量值继承”,并将值本身从“1”更改为“1”。 “INT32(1)”。