Chinaunix首页 | 论坛 | 博客
  • 博客访问: 474545
  • 博文数量: 280
  • 博客积分: 337
  • 博客等级: 二等列兵
  • 技术积分: 1957
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-17 21:36
文章分类

全部博文(280)

文章存档

2017年(13)

2016年(38)

2015年(78)

2014年(67)

2013年(70)

2012年(14)

分类: C/C++

2014-08-06 11:20:25

example:
from:

点击(此处)折叠或打开

  1. local mp = require 'MessagePack'

  2. mp.set_number'float'
  3. mp.set_integer'unsigned'
  4. mp.set_array'with_hole'
  5. mp.set_string'string'

  6. mpac = mp.pack(data)
  7. data = mp.unpack(mpac)

  8. local ltn12 = require 'ltn12'
  9. src = ltn12.source.file(io.open('file', 'r'))
  10. for _, v in mp.unpacker(src) do
  11.     print(v)
  12. end

使用:

点击(此处)折叠或打开

  1. local mp = require 'MessagePack'

  2. mp.set_number'float'
  3. mp.set_integer'unsigned'
  4. mp.set_array'with_hole'
  5. mp.set_string'string'

  6. local tab = { a = 1.89, b = 'b' }
  7. local s = mp.pack(tab)
  8. print(s)
  9. local data = mp.unpack(tabString)
  10. print(data.a, data.b)


unpack后的浮点数精度问题,最好在server和client两端做四舍五入处理

点击(此处)折叠或打开

  1. local math = require 'math'
  2. local mp = require 'MessagePack'

  3. mp.set_number'float'
  4. mp.set_integer'unsigned'
  5. mp.set_array'with_hole'
  6. mp.set_string'string'

  7. function roundOff(num, n)
  8.     if n > 0 then
  9.         local scale = math.pow(10, n-1)
  10.         return math.floor(num / scale + 0.5) * scale
  11.     elseif n < 0 then
  12.         local scale = math.pow(10, n)
  13.         return math.floor(num / scale + 0.5) * scale
  14.     elseif n == 0 then
  15.         return num
  16.     end
  17. end

  18. local tab = { a = 1.89, b = 'b' }
  19. local s = mp.pack(tab)
  20. print(s)
  21. local data = mp.unpack(tabString)
  22. print(data.a, data.b)
  23. data.a = roundOff(data.a, -2)
  24. print(data.a, data.b)



阅读(5660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~