设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2913|回复: 2
打印 上一主题 下一主题

[已经解决] Window_Message 的神秘代号

[复制链接]

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
跳转到指定楼层
1
发表于 2018-11-13 11:47:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 灯笼菜刀王 于 2018-11-13 12:08 编辑

呃, 感觉标题加上震惊, 我就可以直接去UC部报道了, 没辙, 实在不知道该用什么标题, 各位看官将就将就.....

问题来自默认的 Window_Message 脚本



这个是显示文章里的控制符处理, 今天在改造它的时候发现了一个问题,  百思不得其解

text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\008[#{$1}]" }

这个转码操作, 后面的数字 000-007 都可以正常使用, 但是一旦超过007, 用008, 它就失效了(当然下面的 c == "\002",也有一起改成008)



默认的\C 命令, 002换成008就变成这样了~

经过 p 查看运行情况, 发现 代码改成008后, 下面的 c =="\008" 这个判定就不成立了

请问下, 这个是什么原因呢?

-------------------------------------------
思考了下, 从运行后的图显示 \8 来看, c == "\008" 判定不成立是不是因为 代码改008后, gsub! 替换掉的不是008而是8?
如果是这个原因, 那为什么008之前的就不会丢掉00呢

Lv6.析梦学徒

老鹰

梦石
40
星屑
34740
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2018-11-13 15:03:31 | 只看该作者
本帖最后由 百里_飞柳 于 2018-11-13 15:05 编辑

其实有没有想过 \007 还有效,可能就是因为这种 \+三个数字的 表示法是 八进制 数字的表示?

我用新版本的Ruby试了下
  1. p c = "\005[12]"   # => "\u0005[12]"
  2. p c.slice(/./m)    # => "\u0005"

  3. p c = "\008[12]"   # => "\u00008[12]"
  4. p c.slice(/./m)    # => "\u0000"
复制代码


然后继续试了下替换掉前面的00
  1. p c = "\105[12]"  # => "E[12]" # 01000101
  2. p c = "\121[12]"  # => "Q[12]" # 01010001
复制代码

恰好是八进制下这两个字母的ascii码

所以它本质上就是八进制的一个数字,当被slice时会作为整体一同处理,但如果你冒出个\008,那么8就作为了下一个字符,而00被扩展识别成了\u0000的八进制数字

点评

原来如此, 没想到八进制, 感谢解答  发表于 2018-11-13 15:31

评分

参与人数 3星屑 +60 +1 收起 理由
RyanBern + 6 0b110
guoxiaomi + 54 \066
灯笼菜刀王 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 07:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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