2015-11-03 100 views

回答

2

您指定的链接中包含的JavaScript代码,执行转换,在页面上,不混乱:

function OnConvert() 
    { 
     hex = document.calcform.hex.value; 
     hex = hex.match(/[0-9A-Fa-f]{2}/g); 
     len = hex.length; 
     if(len==0) return; 
     txt=''; 
     for(i=0; i<len; i++) 
     { 
      h = hex[i]; 
      code = parseInt(h,16); 
      t = String.fromCharCode(code); 
      txt += t; 
     } 
     document.calcform.txt.value = txt; 
    } 

我没了解清楚你的任务,因为如果你输入E。 G。 EEEFFA那里的形式,你会得到îïú作为输出,在我看来,什么是扩展ASCII。但是有一种简单的方法可以在Ruby中实现相同的功能。

▶ "EEEFFA".scan(/[0-9a-f]{2}/i).map { |cp| cp.to_i(16) }.inject('', &:concat) 
#⇒ "îïú" 

UPD当我从评论的理解,你想每隔8零和一转换为相应的ASCII字母。在这里你去(假设你有一个很长的字符串,包含零和一):

▶ '010000010100001001000011'. 
▷ scan(/[01]{8}/).   # allow only zeros and ones, scan by 8 
▷ map { |e| e.to_i 2 }.  # convert to integers, base 10 
▷ inject '', &:concat  # concatenate into one string 
#⇒ 'ABC' 
+0

我可能不应该包含该链接...我的意思是我想输入诸如“01000001”.some_functions_and_things之类的东西并获得值“A”。你认为你可以帮助我吗?我不是很有经验,我不了解你的代码中发生的一切。我的程序只允许字节00000000到01111111 –

+1

'“01000001”.to_i(2).chr' – mudasobwa

+0

完美!感谢您为我拼写出来。 –

1

上@ mudasobwa的优秀的解决方案略有差异,使用的String#oct的(显然是无证)功能:

'010000010100001001000011' 
    .scan(/0[01]{7}/) 
    .map { |b| b.prepend('0b').oct.chr } 
    .join 

和十六进制数字,完整性:

'627e29397c5727611147503e36355a4f683737' 
    .scan(/[0-7]\h/) 
    .map { |x| x.prepend('0x').oct.chr } 
    .join 

我已经打开在红宝石郎bug报告,如果有人有兴趣...

相关问题