背景:
我有两台机器之间的通信(一台plc和一台运行用c++编写的脚本的计算机(。PLC将发送存储在4096字节数组中的16位Int。
c++代码接收数据并将其存储在中
char data[4096];
我尝试了不同的方法来提取data[]中给定位置的2个字节,并将它们存储在外部int中,但没有成功。我不需要处理大小endian。
char data[4096];
// ^ otherwise you have one incomplete 16-bit int!
在这种情况下,您确实可以使用注释中的提示,简单地转换为int16_t
数组:
auto numbers = static_cast<int16_t*>(data);
为了保证这一点,数组应该已经正确对齐了(因为C++11(:
alignas(2) char data[4096];
尽管如此,您的PLC和主机可能使用不同的endianes,如果是这样,您需要为每个int16_t
值交换字节。