原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:http://blog.csdn.net/humanking7/article/details/50710108
接上文 (Matlab使用Simulink进行UDP通讯1),如上图所示,在对这个4个数据进行打包的时候可以发现 uint8
【即unsigned char】是占1个字节,而double
是占用8个字节。
即,对应的有效数据:
在Simulink中的Pack和UnPack模块里面有“Byte alignment”参数,这个参数使用来对齐发送(接收)数据的大小,左对齐后位补齐所要的字节,补”0”
当 Byte alignment = 8 时,也就是把这个 uint8
对齐为 8个字节
得到的数据如下(多组数据,1列一组):
41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 9A 99 4D 85 3F A9 20 40 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 C0 74 C5 07 79 5A F6 3F 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 F8 65 C0 35 29 F8 1D C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 FE 91 BC 69 98 FC 22 C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 EE 62 07 82 34 21 06 C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
41 00 00 00 00 00 00 00 D8 22 9A 70 44 04 1A 40 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
分析其中一列,可知
41 00 00 00 00 00 00 00
58 F4 E4 FA 0B 01 22 40
7B 14 AE 47 E1 7A 94 3F
61 00 00 00 00 00 00 00
当参数“Byte alignment”为“8”的时候,也就是把这个uint8对齐为8个字节(uint8本来只占1个字节,而double占8个字节)
不管你的数据类型是什么,都会将这个数据类型的大小扩展为8个字节,不够的后面补0
当 Byte alignment = 2 时,也就是把这个 uint8
对齐为 2个字节
得到的数据如下(多组数据,1列一组):
41 00 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 39 13 17 36 BB 67 07 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 12 B4 0F 9A 1E 5C 16 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 36 80 8D 0C 0E 05 1F 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 11 E5 19 D9 51 74 22 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 95 B0 36 43 1A C0 23 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 2D FF AC 26 3D 48 23 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 BF 48 F3 85 6F 17 21 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 CA B9 88 56 93 BF 1A 40 7B 14 AE 47 E1 7A 94 3F 61 00
41 00 90 7A C3 34 9B EC 10 40 7B 14 AE 47 E1 7A 94 3F 61 00
分析其中一列,可知
41 00
39 13 17 36 BB 67 07 40
7B 14 AE 47 E1 7A 94 3F
61 00
当参数“Byte alignment”为“2”的时候,也就是把这个uint8对齐为2个字节(uint8本来只占1个字节,而double占8个字节)
当 Byte alignment = 1 时,也就是把这个 uint8
对齐为 1个字节
得到的数据如下(多组数据,1列一组):
41 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61
41 39 13 17 36 BB 67 07 40 7B 14 AE 47 E1 7A 94 3F 61
41 12 B4 0F 9A 1E 5C 16 40 7B 14 AE 47 E1 7A 94 3F 61
41 36 80 8D 0C 0E 05 1F 40 7B 14 AE 47 E1 7A 94 3F 61
41 11 E5 19 D9 51 74 22 40 7B 14 AE 47 E1 7A 94 3F 61
41 95 B0 36 43 1A C0 23 40 7B 14 AE 47 E1 7A 94 3F 61
41 2D FF AC 26 3D 48 23 40 7B 14 AE 47 E1 7A 94 3F 61
41 BF 48 F3 85 6F 17 21 40 7B 14 AE 47 E1 7A 94 3F 61
41 CA B9 88 56 93 BF 1A 40 7B 14 AE 47 E1 7A 94 3F 61
41 90 7A C3 34 9B EC 10 40 7B 14 AE 47 E1 7A 94 3F 61
41 D4 74 C5 07 79 5A F6 3F 7B 14 AE 47 E1 7A 94 3F 61
分析其中一列,可知
41
39 13 17 36 BB 67 07 40
7B 14 AE 47 E1 7A 94 3F
61
当参数“Byte alignment”为“1”的时候,也就是把这个uint8对齐为1个字节(uint8本来只占1个字节,而double占8个字节)
一般没有特殊要求时还是将“Byte alignment”设为“1”较容易理解和操作,尤其是Matlab与非Matlab环境进行UDP通讯更要注意这个参数。