首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字母转换为相应的控制代码

将字母转换为相应的控制代码
EN

Stack Overflow用户
提问于 2015-01-17 14:14:57
回答 2查看 128关注 0票数 0

给定一个字母(字符串),比如"a",我想将其转换为相应的控制代码,即"\ca" -或等效(在交替语法中)- "\C-a"?\ca"\x01""\u0001"

我希望有一些“好的”,干净的方式来做这个转换,但我不明白。

显而易见的第一次尝试可能是尝试这样的方法:

代码语言:javascript
运行
复制
def convert_to_control_code(letter)
  "\c#{letter}"
end

...But不起作用,因为它总是返回"\u0003{letter}" (其中"\u0003"是控制代码"\c#" )。

我目前的解决方案是通过执行以下操作来“暴力”它:

代码语言:javascript
运行
复制
def convert_to_control_code(letter)
  (0..255).detect { |x| x.chr =~ Regexp.new("\\c#{char}") }.chr
end

然而,我不禁觉得有一种“正确”的方式来做这件事!

编辑:

这是我想出的另一个非暴力的解决方案,看起来很有效:

代码语言:javascript
运行
复制
def convert_to_control_code(letter)
  (letter.ord % 32).chr
end

这看起来好多了,但也很烦人!

EN

回答 2

Stack Overflow用户

发布于 2015-01-17 14:49:34

你可以把它写成:

代码语言:javascript
运行
复制
def convert_to_control_code(letter)
  eval "?\\C-#{letter.chr}" 
end

convert_to_control_code(97) # => "\u0001"
convert_to_control_code(98) # => "\u0002"
票数 1
EN

Stack Overflow用户

发布于 2015-01-17 16:59:48

一种可能是和Ruby本身一样。它看起来可能是这样的:

代码语言:javascript
运行
复制
def convert_to_control(letter)
  letter = letter.chr # ensure we are only dealing with a single char
  return 0177.chr if letter == '?'
  raise 'an error' unless letter.ascii_only? # or do something else
  (letter.ord & 0x9f).chr
end

您可能希望根据正在执行的操作更改结果的编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28000339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档