2015-11-03 214 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報告,如果有人有興趣...