我需要將一個大的二進制字符串(一個字節序列)轉換成ASCII碼,就像這樣table。我也可以從一個十六進制字符串開始。將二進制(或十六進制)轉換爲ASCII
我看過這篇文章:Converting binary data to string in ruby。我找到了一個解決方案,將其轉換爲擴展ASCII表中的字符。我可以爲每個案例編寫條件來轉換,但必須有一個更簡單的方法。有人可以幫忙嗎?
我需要將一個大的二進制字符串(一個字節序列)轉換成ASCII碼,就像這樣table。我也可以從一個十六進制字符串開始。將二進制(或十六進制)轉換爲ASCII
我看過這篇文章:Converting binary data to string in ruby。我找到了一個解決方案,將其轉換爲擴展ASCII表中的字符。我可以爲每個案例編寫條件來轉換,但必須有一個更簡單的方法。有人可以幫忙嗎?
您指定的鏈接中包含的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'
上@ 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報告,如果有人有興趣...
我可能不應該包含該鏈接...我的意思是我想輸入諸如「01000001」.some_functions_and_things之類的東西並獲得值「A」。你認爲你可以幫助我嗎?我不是很有經驗,我不瞭解你的代碼中發生的一切。我的程序只允許字節00000000到01111111 –
'「01000001」.to_i(2).chr' – mudasobwa
完美!感謝您爲我拼寫出來。 –