gpt4 book ai didi

C 代码截断为最大值 7 位

转载 作者:行者123 更新时间:2023-11-30 14:55:19 24 4
gpt4 key购买 nike

我有一些代码试图用于网络通信,以将信息从 C++ 提取到 MATLAB。我正在使用 Mathworks 开放交换中的 pnet 程序(来自 c 的 mex 文件):https://www.mathworks.com/matlabcentral/fileexchange/345-tcp-udp-ip-toolbox-2-0-6?s_tid=answers_rc2-2_p5_MLT

在我的接收端,我期望收到 int8,然后将其类型转换为 uint8。因此,对于每个接收到的字节,我期望值是 0-255。

我注意到一些差异,我在接收端收到大量 127,并通过进行一些基本调试发现,对于我从 128-255 发送的每个值,我的接收代码(紧接在 pnet receive 调用之后)是显示 127。

因此,我认为 pnet.c 文件中可能存在错误,导致值截断为 7 位最大值,而不是显示完整的 uint8 范围。

关于为什么会发生这种情况有什么想法吗?我主要是一个 matlab 用户,并没有花太多时间在数据类型转换上,所以我觉得这里有点超出我的深度。

接收返回错误/有趣错误字符的代码:

data = pnet('read',number of bytes to read,'noblock')

最佳答案

我知道这里发生了什么。事实证明,如果您使用 UDP 套接字(Java/MATLAB UDP 实现强制转换 int8)将大于 127 的值接收到 MATLAB,并且不指定您期望接收的数据类型,MATLAB 将假定一些非描述性的数据错误字符。如果您进一步尝试对该错误字符进行类型转换,它将限制为该类型可能的最高值。

就我而言,因为我正确地获取了一些数据,所以我没有意识到我没有正确指示 MATLAB 以 uint8 形式接收数据。因此,它正确接收了 0-127,但给了我 128-255 的错误字符。然后,我尝试将该错误字符转换为多种类型,发现对于每个转换,它都显示为该特定类型的最大值。

该修复只需要我向套接字接收调用添加一个“uint8”选项。

固定代码:

data = pnet('read',number of bytes,'uint8','noblock')

关于C 代码截断为最大值 7 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45966436/

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