设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2772|回复: 2
收起左侧

字节集与逻辑型数组互转第二版,数组成员数不必再是8的倍数

[复制链接]
发表于 2018-9-13 21:06:31 | 显示全部楼层 |阅读模式
本帖最后由 CNWTEPRG 于 2018-9-13 21:05 编辑

第一版:1字节有8个位,可以存放8个位成员,必须是8的倍数才可以转换,1个位成员等于1个逻辑型数组的成员。
第二版:开头前4字节标注有几个位成员,后面的是位的字节集数据,因此成员数可以是任意值。

转换过程
数组最后1成员如果为假则一直删除,遇到真为止,再往尾部填充假,到总成员数8的倍数为止。
处理后的逻辑型数组转换为字节集并在开头加上4字节转换前的位成员数即可。

还原过程
取开头前4字节数据,作为位成员数,第5字节到最后的数据为主要数据。
将主要数据还原成逻辑型数组,此时成员数还是8的倍数。
将成员数重定义成前4字节指定的位成员数并保留原有数据,多了用假填充,少了就删除。


  1. .版本 2
  2. .支持库 spec

  3. .程序集 字节集与逻辑型数组互转

  4. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  5. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  6. 返回 (0)  ' 可以根据您的需要返回任意数值

  7. .子程序 _临时子程序
  8. .局部变量 A, 逻辑型, , "0"
  9. .局部变量 字节集, 字节集
  10. .局部变量 B, 逻辑型, , "0"

  11. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
  12. A = { 真, 真, 假, 假, 真, 假, 真, 真, 假, 假, 假 }

  13. 字节集 = 逻辑型数组到字节集2 (A)

  14. 字节集到逻辑型数组2 (字节集, B)

  15. 调试输出 (字节集, B)


  16. .子程序 逻辑型数组转换前处理
  17. .参数 逻辑型数组, 逻辑型, 参考 数组
  18. .局部变量 计数, 整数型
  19. .局部变量 填充数, 整数型

  20. .变量循环首 (取数组成员数 (逻辑型数组), 1, -1, 计数)
  21.     .如果 (逻辑型数组 [计数])
  22.         跳出循环 ()
  23.     .否则
  24.         删除成员 (逻辑型数组, 计数, 1)
  25.     .如果结束

  26. .变量循环尾 ()
  27. 重定义数组 (逻辑型数组, 真, 取数组成员数 (逻辑型数组) + 8 - 取数组成员数 (逻辑型数组) % 8)

  28. .子程序 逻辑型数组到字节集2, 字节集, 公开
  29. .参数 逻辑型数组, 逻辑型, 数组
  30. .局部变量 数组副本, 逻辑型, , "0"
  31. .局部变量 位数, 整数型

  32. 位数 = 取数组成员数 (逻辑型数组)
  33. 数组副本 = 逻辑型数组
  34. 逻辑型数组转换前处理 (数组副本)

  35. 返回 (到字节集 (位数) + 逻辑型数组到字节集 (数组副本))


  36. .子程序 字节集到逻辑型数组2, , 公开
  37. .参数 字节集数据, 字节集
  38. .参数 逻辑型数组, 逻辑型, 参考 数组
  39. .局部变量 位数, 整数型

  40. 位数 = 取字节集数据 (字节集数据, 3, 1)
  41. 字节集到逻辑型数组 (取字节集右边 (字节集数据, 取字节集长度 (字节集数据) - 4), 逻辑型数组)
  42. 重定义数组 (逻辑型数组, 真, 位数)


  43. .子程序 字节集到逻辑型数组, , 公开
  44. .参数 字节集数据, 字节集
  45. .参数 逻辑型数组, 逻辑型, 参考 数组
  46. .参数 高到低位, 逻辑型, 可空
  47. .局部变量 字节集长度, 整数型
  48. .局部变量 字节集计数, 整数型
  49. .局部变量 移位位数计数, 整数型
  50. .局部变量 移位后的值, 字节型
  51. .局部变量 逻辑数组计数, 整数型
  52. .局部变量 循环数组, 整数型, , "0"

  53. 字节集长度 = 取字节集长度 (字节集数据)
  54. 重定义数组 (逻辑型数组, 假, 字节集长度 × 8)
  55. .如果 (高到低位)
  56.     循环数组 = { 7, 0, -1 }
  57. .否则
  58.     循环数组 = { 0, 7, 1 }
  59. .如果结束
  60. .计次循环首 (字节集长度, 字节集计数)
  61.     .变量循环首 (循环数组 [1], 循环数组 [2], 循环数组 [3], 移位位数计数)
  62.         逻辑数组计数 = 逻辑数组计数 + 1
  63.         移位后的值 = 左移 (1, 移位位数计数)
  64.         逻辑型数组 [逻辑数组计数] = 位与 (字节集数据 [字节集计数], 移位后的值) = 移位后的值
  65.     .变量循环尾 ()
  66. .计次循环尾 ()


  67. .子程序 逻辑型数组到字节集, 字节集, 公开
  68. .参数 逻辑型数组, 逻辑型, 数组
  69. .参数 高到低位, 逻辑型, 可空
  70. .局部变量 逻辑组长度, 整数型
  71. .局部变量 字节集数据, 字节集
  72. .局部变量 字节集长度, 整数型
  73. .局部变量 计数, 整数型
  74. .局部变量 移位计数, 整数型
  75. .局部变量 逻辑计数, 整数型
  76. .局部变量 循环数组, 整数型, , "0"

  77. 逻辑组长度 = 取数组成员数 (逻辑型数组)
  78. .如果真 (逻辑组长度 % 8 ≠ 0)
  79.     输出调试文本 (“数组成员数必须是8的倍数才可以导出字节集数据。”)
  80.     返回 ({  })
  81. .如果真结束
  82. 字节集数据 = 取空白字节集 (逻辑组长度 ÷ 8)
  83. 字节集长度 = 取字节集长度 (字节集数据)
  84. .如果 (高到低位)
  85.     循环数组 = { 7, 0, -1 }
  86. .否则
  87.     循环数组 = { 0, 7, 1 }
  88. .如果结束
  89. .计次循环首 (字节集长度, 计数)
  90.     .变量循环首 (循环数组 [1], 循环数组 [2], 循环数组 [3], 移位计数)
  91.         .如果真 (逻辑型数组 [逻辑计数 + 1])
  92.             字节集数据 [计数] = 位或 (左移 (1, 移位计数), 字节集数据 [计数])
  93.         .如果真结束
  94.         逻辑计数 = 逻辑计数 + 1
  95.     .变量循环尾 ()
  96. .计次循环尾 ()
  97. 返回 (字节集数据)

复制代码

相关帖子

发表于 2018-9-13 23:40:03 | 显示全部楼层
谢谢分享,正好需要。
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-26 03:50 , Processed in 0.998057 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表