我需要将一个大的二进制字符串(一个字节序列)转换成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
完美!感谢您为我拼写出来。 –