Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1151899
  • 博文数量: 341
  • 博客积分: 12744
  • 博客等级: 上将
  • 技术积分: 4040
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 09:34
文章分类
文章存档

2014年(1)

2013年(10)

2012年(17)

2011年(63)

2010年(102)

2009年(107)

2008年(41)

分类: Python/Ruby

2011-11-03 21:07:41

一直在做服务器相关的东西,消息的定制方式中有相关的字段以确定消息字段的长度,而服务器以前都是用c++实现的,一般的实现方式如下(其中假设消息长度为256):
  1. char buff[SIZE] = {0};
  2. char *p = buff;
  3. *(int *)p = 256;
而到了其他一些没有指针的语言中这样的处理就犯了难,比如说客户端中会遇到的各种语言,我分别在C#(安全的)和ruby中处理过这样的问题。
以下是我在ruby中的解决办法(安全的C#的解决办法我会在下一篇博文中讲述):

  1. def ConvIntIntoArray(num)
  2.     (num & 0xFF).chr +
  3.         (num >> 8 & 0xFF).chr +
  4.         (num >> 16 & 0xFF).chr +
  5.         (num >> 24 & 0xFF).chr
  6. end

  7. def ConvArrayIntoInt(array)
  8.     array[0].ord +
  9.         (array[1].ord << 8) +
  10.         (array[2].ord << 16) +
  11.         (array[3].ord << 24)
  12. end

  13. def ConvShortIntoArray(num)
  14.     (num & 0xFF).chr +
  15.         (num >> 8 & 0xFF).chr
  16. end

  17. def ConvArrayIntoShort(array)
  18.     array[0].ord +
  19.         (array[1].ord << 8)
  20. end
可以看到,即使是ConvIntIntoArray返回的字符串仍然可以使用+号拼接字符串,这点让人感觉非常贴心,也是ruby人性化的体现吧。

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